es like模糊匹配_京东搜索引擎-ES入门篇

本文介绍了Elasticsearch,一个基于Lucene的搜索服务器,以其分布式、RESTful接口和高速搜索闻名。强调了其在大数据量下进行模糊查询的优势,以及在资产监控平台等场景中的应用。同时,文章涵盖了从下载、安装到实际操作,如集群状态查看、索引与文档操作、搜索、条件搜索、过滤和聚合搜索等关键知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.简介

Elasticsearch是一个基于Lucence的搜索服务器。它提供了一个分布式的搜索引擎,基于restful web接口。广泛应用于云计算中,能够实时搜索,具有稳定,可靠,快速的特点。

二.为啥要学习Elasticsearch?

它其实也是一种数据库的优化方案,它的强大之处在于模糊查询。如果是普通数据库查询 like%xxxx%,其实是不走索引的。只要你的数据库的量很大,你的查询肯定会是秒级别的。(es搜索速度很快)

用户输入其实没那么精确或者打错,Elasticsearch却能返回用户想要的结果。(es匹配相关性较高)

还有一点是我想在目前参与的资产监控平台加一个es搜索功能,公司资产太多,资产查询模块速度较慢,值得优化。

三.下载

  1. Elasticsearch服务端
https://www.elastic.co/cn/downloads/elasticsearchhttp://127.0.0.1:9200/
  1. Elasticsearch客户端
- https://github.com/mobz/elasticsearch-head/- 下载后安装依赖 npm install、npm run start;- http://127.0.0.1:9100/- 由于ES进程跟客户端进程端口号不同,存在跨域问题,所以在- - ES配置下跨域问题(elasticsearch.yml)- 跨域配置:  http.cors.enabled: true   http.cors.allow-origin: 
  1. 安装Kibana
- https://www.elastic.co/cn/downloads/kibana- http://localhost:5601/
  1. 安装IK分词器插件
 - https://github.com/medcl/elasticsearch-analysis-ik/ - 下载解压后将目录拷贝到Elasticsearch根目录的plugins目录中
7204f37fb530cc7d079a525416ecd9e3.png
29e6a963385585bf9c5c6f7e6e568d63.png

四.集群状态查看

  • 查看集群健康状态
GET /_cat/health?v
  • 查看节点状态
GET /_cat/nodes?v
  • 查看所有索引信息
GET /_cat/indices?v

五.索引操作

  • 创建索引并查看
PUT /customerGET /_cat/indices?v
  • 删除索引并查看
DELETE /customerGET /_cat/indices?v

六.文档操作

  • 在索引中添加文档
put /customer/doc/1{  "name":"John Doe"}
  • 查看索引的文档
GET /customer/doc/1
  • 修改索引的文档
POST /customer/doc/1/_update{  "doc":{"name":"Jone Doe"}}
  • 删除索引的文档
DELETE /customer/doc/1
  • 对索引中的文档执行批量操作
POST /customer/doc/_bulk{"index":{"_id":"1"}}{"name":"John Doe"}{"index":{"_id":"2"}}{"name":"Jane Doe"}

七.数据搜索

导入数据,地址为https://github.com/macrozheng/mall-learning/blob/master/document/json/accounts.json直接使用批量操作来导入数据
de617c909fe9dd786e20fc2b66d0ac56.png
  • 查看索引信息
查看索引信息GET /_cat/indices?v

八.搜索入门

  • 搜索全部
GET /bank/_search{  "query":{"match_all":{}}}
  • 分页搜索
GET /bank/_search{  "query":{"match_all":{}},  "from":0,  "size":10}
  • 搜索排序,使用sort表示,列如按balance字段降序
GET /bank/_search{  "query": { "match_all": {} },  "sort": { "balance": { "order": "desc" } }}
  • 搜索并返回指定字段内容
GET /bank/_search{  "query": { "match_all": {} },  "_source": ["account_number", "balance"]}

九.条件搜索

  • 条件搜索
GET /bank/_search{  "query": {    "match": {      "account_number": 20    }  }}
  • 文本类型字段
GET /bank/_search{  "query": {    "match": {(对于数值类型match操作使用的是精确匹配,对于文本类型使用的是模糊匹配)      "address": "mill"    }  },  "_source": [    "address",    "account_number"  ]}
  • 短语匹配搜索
GET /bank/_search{  "query": {    "match_phrase": {      "address": "mill lane"    }  }}

十.组合搜索

  • 组合搜索 使用bool来进行组合
must表示同时满足,例如搜索address字段同时包含mill和lane的文档GET /bank/_search{  "query": {    "bool": {      "must": [        { "match": { "address": "mill" } },        { "match": { "address": "lane" } }      ]    }  }}
  • 组合搜索 should
should表示满足其中任意一个,搜索address字段中包含mill或者lane的文档GET /bank/_search{  "query": {    "bool": {      "should": [        { "match": { "address": "mill" } },        { "match": { "address": "lane" } }      ]    }  }}
  • 组合搜索 must_not 同时不满足
GET /bank/_search{  "query": {    "bool": {      "must_not": [        { "match": { "address": "mill" } },        { "match": { "address": "lane" } }      ]    }  }}
  • 组合搜索 must和must_not
GET /bank/_search{  "query": {    "bool": {      "must": [        { "match": { "age": "40" } }      ],      "must_not": [        { "match": { "state": "ID" } }      ]    }  }}

十一.过滤搜索

  • 搜索过滤,使用filter来表示,例如过滤出balance字段在20000~30000的文档;
GET /bank/_search{  "query": {    "bool": {      "must": { "match_all": {} },      "filter": {        "range": {          "balance": {            "gte": 20000,            "lte": 30000          }        }      }    }  }}

十二.搜索聚合

  • 对搜索进行聚合,使用aggs来表示,类似Mysql中的group by
  • 例如对state字段进行聚合,统计相同state文档数量
GET /bank/_search{  "size": 0,  "aggs": {    "group_by_state": {      "terms": {        "field": "state.keyword"      }    }  }}
605917a818756db5a5fd5665e6fafe21.png
  • 嵌套聚合,例如对state字段进行聚合,统计出相同state的文档数量,再统计出balance的平均值;
GET /bank/_search{  "size": 0,  "aggs": {    "group_by_state": {      "terms": {        "field": "state.keyword"      },      "aggs": {        "average_balance": {          "avg": {            "field": "balance"          }        }      }    }  }}
748179a312b470da29134cb46829a6c4.png
  • 对聚合搜索的结果进行排序,例如按balance的平均值降序排列;
GET /bank/_search{  "size": 0,  "aggs": {    "group_by_state": {      "terms": {        "field": "state.keyword",        "order": {          "average_balance": "desc"        }      },      "aggs": {        "average_balance": {          "avg": {            "field": "balance"          }        }      }    }  }}
305c45b10281cade92bc545192aeda7c.png
  • 按字段值的范围进行分段聚合,例如分段范围为age字段的[20,30] [30,40] [40,50],之后按gender统计文档个数和balance的平均值;
GET /bank/_search{  "size": 0,  "aggs": {    "group_by_age": {      "range": {        "field": "age",        "ranges": [          {            "from": 20,            "to": 30          },          {            "from": 30,            "to": 40          },          {            "from": 40,            "to": 50          }        ]      },      "aggs": {        "group_by_gender": {          "terms": {            "field": "gender.keyword"          },          "aggs": {            "average_balance": {              "avg": {                "field": "balance"              }            }          }        }      }    }  }}

十三.学习参考来自

  • http://www.macrozheng.com/#/reference/elasticsearch_start
  • https://www.zhihu.com/question/323811022
  • https://www.515code.com/posts/x7y2e0z2/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值