Elasticsearch 基础

本贴最后更新于 989 天前,其中的信息可能已经时移世易

Elasticsearch

1. 安装

安装链接

  • 点击链接安装,然后解压即可

2. 基础语法

2.1 索引

  • 创建 students 索引: put: host/students
  • 查看单个索引:get: host/students
{ "shopping": {//索引名 "aliases": {},//别名 "mappings": {},//映射 "settings": {//设置 "index": {//设置 - 索引 "creation_date": "1617861426847",//设置 - 索引 - 创建时间 "number_of_shards": "1",//设置 - 索引 - 主分片数量 "number_of_replicas": "1",//设置 - 索引 - 主分片数量 "uuid": "J0WlEhh4R7aDrfIc3AkwWQ",//设置 - 索引 - 主分片数量 "version": {//设置 - 索引 - 主分片数量 "created": "7080099" }, "provided_name": "shopping"//设置 - 索引 - 主分片数量 } } } }
  • 查询全部的索引,以及索引的状态信息:get: host/_cat/indices?v

image-20220627165849192

表头 含义
health 当前服务器健康状态: green(集群完整) yellow(单点正常、集群不完整) red(单点不正常)
status 索引打开、关闭状态
index 索引名
uuid 索引统一编号
pri 主分片数量
rep 副本数量
docs.count 可用文档数量
docs.deleted 文档删除状态(逻辑删除)
store.size 主分片和副分片整体占空间大小
pri.store.size 主分片占空间大小
  • 删除索引:``DELETE: host/studets`

2.2 文档

  • 创建文档(不指定主键,他会自己生成一个主键 _id):POST : host/shop/_doc 请求的 JSON 格式为:
{ "shop_name": "西瓜", "price": 20 }
  • 创建文档(指定主键):POST/PUT : host/shop/_doc/1 请求的 JSON 格式同上.

2.3 查询

  • 主键查询:GET: host/shop/_doc/1
  • 查看所有数据:GET: host/shop/_search

2.3.1 条件查询

  • URL 带参查询方式:GET host/shop/_search?q=shop_name:西瓜 格式是后面有个 q 参数,然后里面加上条件,多条件的时候使用 AND 或者 OR 连接

  • 我们主要使用的是 请求体带参查询 同样是 GET 请求,但是需要有 json 体

    • 单条件查询使用 "match";(多条件详见 bool 查询)
    { "query": { "match": { "shop_name":"西瓜" } } }
    • 查询所有文档内容用 "match_all"
    { "query": { "match_all":{} } }
    • 指定查询的字段使用 _source:[]
    { "query": { "match_all":{} } "_source":["shop_name":"西瓜","price":20] }

2.3.2 分页查询

使用 from 和 size 进行分页查询

{ "query":{ "match_all":{} }, "from":0, "size":2 }

2.3.3 查询排序

{ "query":{ "match_all":{} }, "sort":{ "price":{ "order":"desc" } } }

2.3.4 bool 查询

must:与关系,相当于关系型数据库中的 and。

should:或关系,相当于关系型数据库中的 or。

must_not:非关系,相当于关系型数据库中的 not。

filter:过滤条件。

range:条件筛选范围。

多条件查询
  • 多条件查询 must 相当于数据库的&& should 相当于数据库的 ||
{ "query":{ "bool":{ "must(should)":[{ "match":{ "shop_name":"西瓜" } },{ "match":{ "price":20 } }] } } }
范围查询
  • gt: > 大于(greater than)

  • lt: < 小于(less than)

  • gte: >= 大于或等于(greater than or equal to)

  • lte: <= 小于或等于(less than or equal to)

    { "query": { "bool": { "should": { "match": { "shop_name":西瓜 } } }, "filter": { "range": { "gt":10 } } } }

2.3.5 全文检索

  • 全文检索比较强,我输入“西南”,他能返回西瓜和南瓜,只要是我查询的字段包含这里面的字的时候他都返回
{ "query": { "match": { "shop_name":"西南" } } }

2.3.6 完全匹配(模糊查询)

跟全文检索不同的是全文检索使用的是 match 而 完全匹配使用的是 match_phrase

{ "query": { "match_phrase": { "shop_name":"西南" } } }

2.3.7 高亮查询

使用 highlight 来进行处理

{ "query": { "match": { "shop_name":"西南" } }, "highlight": { "fields": { "shop_name":{} } } }

2.3.8 聚合查询

聚合查询使用的是 aggs

  • 分组操作

    { "aggs": { "price_group": //名字随便起,分组的名字 { "terms"://分组操作 { "field":"price" //要分组的字段 } } }, "size":0 //不加这个他会先显示所有数据,再显示分组的 }
  • 求平均值操作:跟上面同理,只是 terms 操作变成了 avg 操作

    { "aggs": { "price_avg": //名字随便起,分组的名字 { "avg": { "field":"price" //要分组的字段 } } }, "size":0 //不加这个他会先显示所有数据,再显示分组的 }

2.4 修改操作

  • 全局修改:POST: host/shop/_doc/1 请求的 json 格式为
{ “name” : "黄瓜", "price": 30, "weight":20 }
  • 局部修改:POST: host/shop/_update/1 请求的 json 格式为
{ "doc":{ "name" : "南瓜" } }
  • 删除一个文档:DELETE: host/shop/_doc/1,删除一个文档不会立即从磁盘上移除,它只是被标记成已删除(逻辑删除)。
{ "_index": "shop", "_type": "_doc", "_id": "1", "_version": 4, "result": "deleted", ------标记删除成功 "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 4, "_primary_term": 1 }

2.5 映射

  • 创建一个新的索引

  • 发送映射请求:PUT:/host/user/_mapping

    { "properties":{ "name":{ "type":"text", //这个类型可以全文检索 "index":true }, "sex":{ "type":"keyword", //这个类型不能全文检索 "index":true } } }
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 209 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...