Elasticsearch(Kibana)基本语法

Elasticsearch 是什么

  1. ES全称ElasticSearch,是一个基于Lucene的搜索服务器。(其实就是对Lucene进行封装,提供了REST API的操作接口)

  2. ElasticSearch作为一个高度可拓展的开源全文搜索和分析引擎,可用于快速的对大数据进行存储,搜索和分析。

  3. ElasticSearch是基于Java开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。

  4. 根据DB-Engines排名显示,ElasticSearch是最受欢迎的企业级搜索引擎。

  5. ElasticSearch和Logstash(数据收集、日志解析引擎)、Kibana(分析和可视化平台)一起开发的。这三个产品被设计成一个集成解决方案,称为“Elastic Stack”(以前被称为ELK技术栈)

Elasticsearch 应用案例

  • GitHub: 2013 年初,抛弃了 Solr,采取 Elasticsearch 来做 PB 级的搜索。 “GitHub 使用Elasticsearch 搜索 20TB 的数据,包括 13 亿文件和 1300 亿行代码”。
  • 维基百科:启动以 Elasticsearch 为基础的核心搜索架构
  • 百度:目前广泛使用 Elasticsearch 作为文本数据分析,采集百度所有服务器上的各类指标数据及用户自定义数据,通过对各种数据进行多维分析展示,辅助定位分析实例异常或业务层面异常。目前覆盖百度内部 20 多个业务线(包括云分析、网盟、预测、文库、直达号、钱包、 风控等),单集群最大 100 台机器, 200 个 ES 节点,每天导入 30TB+数据。
  • 新浪:使用 Elasticsearch 分析处理 32 亿条实时日志。
  • 阿里:使用 Elasticsearch 构建日志采集和分析体系。
  • Stack Overflow:解决 Bug 问题的网站,全英文,编程人员交流的网站。

RESTful & JSON

REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。 Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在请求之间的任何时间点重启,客户端不会得到通知。此外,无状态请求可以由任何可用服务器回答,这十分适合云计算之类的环境。客户端可以缓存数据以改进性能。

在服务器端,应用程序状态和功能可以分为各种资源。资源是一个有趣的概念实体,它向客户端公开。资源的例子有:应用程序对象、数据库记录、算法等等。每个资源都使用 URI(Universal Resource Identifier) 得到一个唯一的地址。所有资源都共享统一的接口,以便在客户端和服务器之间传输状态。使用的是标准的 HTTP 方法,比如 GET、 PUT、 POST 和DELETE。

在 REST 样式的 Web 服务中,每个资源都有一个地址。资源本身都是方法调用的目
标,方法列表对所有资源都是一样的。这些方法都是标准方法,包括 HTTP GET、 POST、PUT、 DELETE,还可能包括 HEAD 和 OPTIONS。简单的理解就是,如果想要访问互联网上的资源,就必须向资源所在的服务器发出请求,请求体中必须包含资源的网络路径, 以及对资源进行的操作(增删改查)

REST 样式的 Web 服务若有返回结果,大多数以JSON字符串形式返回。

ES基本语法

#索引操作
#查看索引
GET /_cat/indices?v


#创建索引
PUT /products

PUT /orders
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0
  }
}

#删除索引
DELETE /products

#映射

#映射信息不允许删除和修改

#类型 : 字符串类型:keyword(适用于比较短的字符串如:关键字,关键词)  text(一段字符串如:文本)    
#        数字类型: integer  long  
#        小数类型: float double
#        布尔类型: boolean
#        日期类型:date

#没办法直接创建映射,只可以在创建索引的时候创建映射

#创建商品索引,指定mapping{id,title,price,created_at,description}
PUT /products
{
   "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0
  },
  
  "mappings": {
    "properties": {
      "id":{
        "type": "integer"
      },
      "title":{
        "type": "keyword"
      },
      "price":{
        "type": "double"
      },
      "created_at":{
        "type": "date",
        "format": "yyyy-MM-dd"
      },
      "description":{
        "type": "text"
      }
    }
  }
}

#查看某个索引的映射信息
GET /products/_mapping


#添加文档  手动指定 _id
POST /products/_doc/1  
{
  "id":1,
  "title":"小浣熊",
  "price":0.5,
  "created_at":"2022-11-12",
  "description":"小浣熊真好吃"
}

#添加文档  自动生成文档id
POST /products/_doc/
{
  "title":"日本豆",
  "price":1.5,
  "created_at":"2022-11-18",
  "description":"日本豆真好吃"
}


# 文档查询操作  基于id查询    dqwGOIQBxCqpDl5LBOGG
GET /products/_doc/4

#删除文档      基于id删除
DELETE /products/_doc/dqwGOIQBxCqpDl5LBOGG

#更新文档   删除原始文档,然后重新添加
PUT /products/_doc/1
{
  "id":1,
  "title":"小浣熊熊",
  "price":0.5,
  "created_at":"2022-11-12",
  "description":"小浣熊真好吃,真好吃!"
}

#更新文档   基于指定的字段进行更新
POST /products/_doc/1/_update
{
  "doc":{
    "title":"小浣熊熊熊"
  }
}

#文档批量操作   添加
POST /products/_doc/_bulk
{"index":{"_id":2}}
{"id":2,"title":"北京烤鸭","price":8888.8,"created_at":"2022-11-12","description":"北京烤鸭真好吃,真好吃!"}
{"index":{"_id":3}}
{"id":2,"title":"南京板鸭","price":8888.8,"created_at":"2022-11-11","description":"南京板鸭真好吃,真好吃!"}


#文档批量操作   更新  删除

POST /products/_doc/_bulk
{"index":{"_id":16}}
{"id":16,"title":"mick","price":9999.9,"created_at":"2022-11-12","description":"good mick!"}
{"update":{"_id":3}}
{"doc":{"title":"南京板鸭2号"}}
{"delete":{"_id":2}}









#=====================================================高级查询=====================================================================



#query DSL 语法  查询所有  match_all
GET /products/_doc/_search
{
  "query":{
    "match_all":{}
  }
}

#查询所有
GET /products/_search
{
  "query":{
    "match_all": {}
  }
}


#trem  基于关键词查询 
# keyword类型不分词 日后搜索使用 全部内容搜索
#text类型在es里是进行分词处理的 默认是es的标准分词器(中文是单字分词,英文是单词分词)  
#integer类型不分词
#double类型不分词
#date类型不分词
#总结:在es中除了text类型分词,其余类型均不分词   , 在es中默认使用的是标准分词器
GET /products/_search
{
  "query": {
    "term": {
      "description": {
        "value": "good mick"
      }
    }
  }
}

#范围查询  range
GET /products/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 0.5,
        "lte": 5
      }
    }
  }
}

#前缀查询  prefix   精准查询
GET /products/_search
{
  "query": {
    "prefix": {
      "description": {
        "value": "good"
      }
    }
  }
}
 

#通配符查询   wildcard   ?代表一个字符  *代表多个字符
GET /products/_search 
{
  "query": {
    "wildcard": {
      "description": {
        "value": "go*"
      }
    }
  }
}

#多id查询
GET /products/_search
{
  "query": {
    "ids": {
      "values": [1,15]
    }
  }
}

#模糊查询 fuzzy  最大模糊错误 必须在0-2之间
#搜索关键词长度为2不允许存在模糊 查询
#搜索关键词长度为3-5允许一次模糊查询
#搜索关键词长度大于5允许最大2模糊
GET /products/_search
{
  "query": {
    "fuzzy": {
      "title": "小浣猫"
    }
  }
}


#布尔查询
#bool关键字 用来组合多个条件实现符合查询
#must相当于&&同时成立
#should相当于||有一个成立就行
#must_not相当于!不能满足任何一个
GET /products/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "ids": {
            "values": [1]
          }
        },{
          "term": {
            "title": {
              "value": "小浣熊熊熊"
            }
          }
        }
      ]
    }
  }
}


#多字段查询  multi_match
# query  输入关键词 输入一段文本
#注意:字段类型分词,将查询条件分词之后进行查询改字段  如果改字段不分词就会将查询条件作为整体查询
GET /products/_search
{
  "query": {
    "multi_match": {
      "query": "小浣熊熊熊",
      "fields": ["title","description"]
    }
  }
}


#默认字段分词查询
GET /products/_search
{
  "query": {
    "query_string": {
      "default_field": "description",
      "query": "熊熊真可爱"
    }
  },
  "highlight": {
    "fields": {
      "*":{}
    }
  },
  "from": 3,
  "size": 3
}
























































你可能感兴趣的:(elasticsearch,搜索引擎,大数据)