ElasticSearch 搜索
2020-04-17 16:03:48来源:博客园 阅读 ()
ElasticSearch 搜索
ES有2种搜索方式
- term系列
- match系列
term系列搜索
term
POST 192.168.1.9:9200/mall/_search { "query":{ "term":{ "goods_name":"苹果" } } }
匹配机制是equals,指定字段的值要相等才算匹配,返回所有匹配的document。
如果是float这种数值型,10.0、10是equals的,也算匹配的。
terms
POST 192.168.1.9:9200/mall/_search { "query":{ "terms":{ "goods_name":["桃子","梨子"] } } }
数组,只要该字段的值是数组中的任意一个元素,就认为该文档匹配。
不管是term、还是terms,都只支持一个字段,不能使用多个字段进行查询。
分析一下返回的数据
{ "took": 2, #took是take的过去式,搜索花费的时间,ms "timed_out": false, #本次搜索是否超时 "_shards": { #分片信息 "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 2, #匹配的document的数量 "relation": "eq" #关系是匹配 }, "max_score": 1.0, #最大的socre,ES会给每个document分配一个score,搜索结果按score升序排列 "hits": [ { "_index": "mall", #index "_type": "_doc", #type "_id": "2", #document的id "_score": 1.0, #score "_source": { #数据 "goods_name": "桃子", "goods_price": 3.0, "goods_description": "新鲜桃子,3元一斤" } }, { "_index": "mall", "_type": "_doc", "_id": "3", "_score": 1.0, "_source": { "goods_name": "梨子", "goods_price": 5.0, "goods_description": "新鲜桃子,5元一斤" } } ] } }
match系列搜索
match_all
POST 192.168.1.9:9200/mall/_search { "query":{ "match_all":{ } } }
返回所有的document。match_all里面不能写字段。
match
POST 192.168.1.9:9200/mall/_search { "query":{ "match":{ "goods_description":"梨子" } } }
如果使用text类型的字段,会进行(拆)分词匹配,比如上面会拆分为"梨"、"子"2个字符,只要商品描述中含有“梨”字或"子"字,就认为该文档匹配。
如果match中写其它类型的字段,比如写keyword类型,那效果和term一样,都是equals 完全匹配。
multi_match
POST 192.168.1.9:9200/mall/_search { "query": { "multi_match": { "query":"苹果", "fields":["goods_name","goods_descriptioon"] } } }
match只能用一个字段来进行匹配,multi_match可以用多个字段来进行匹配。
只要某一个字段匹配了,就认为该文档匹配,字段之间是或的关系。如果该字段是text类型就分词匹配,如果该字段不是text类型就执行完全匹配。
match_phrase
POST 192.168.1.9:9200/mall/_search { "query": { "match_phrase": { "goods_description":"子" } } }
效果和match完全相同。
match_phrase_prefix
POST 192.168.1.9:9200/mall/_search { "query": { "match_phrase_prefix": { "goods_description":"子" } } }
分词匹配,使用的字段必须是text类型,如果不是text类型会报错。
说明
- 使用GET、POST均可
- 返回的是所有匹配的文档
- 使用哪个字段进行匹配,可以由用户指定,前端给出搜索选项“按标题进行搜索”、“按内容进行搜索”......也可以使用固定的字段进行搜索,比如搜索商品,只按商品名称进行搜索。
值由用户输入,前端把搜索框的值传递给后台,后台查询ES。
原文链接:https://www.cnblogs.com/chy18883701161/p/12720978.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Spring Boot 教程 - Elasticsearch 2020-06-09
- Elasticsearch如何有惊无险地入门,我是用心的 2020-05-28
- ElasticSearch7.4.2安装、使用以及与SpringBoot的整合 2020-05-27
- LeetCode 面试题33. 二叉搜索树的后序遍历序列 2020-05-22
- 突击Java面试-分布式搜索引擎的架构原理 2020-05-19
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash