本节使用的是ES低版本,包含type。

分类

  • query string search
  • query DSL
  • query filter
  • full-text search
  • phrase search
  • highlight search

1、query string search

搜索全部商品:GET /ecommerce/product/_search

  • took:耗费了几毫秒
  • timed_out:是否超时,这里是没有
  • _shards:数据拆成了5个分片,所以对于搜索请求,会打到所有的primary shard(或者是它的某个replica shard也可以)
  • hits.total:查询结果的数量,3个document
  • hits.max_score:score的含义,就是document对于一个search的相关度的匹配分数,越相关,就越匹配,分数也高
  • hits.hits:包含了匹配搜索的document的详细数据
{"took": 2,"timed_out": false,"_shards": {"total": 5,"successful": 5,"failed": 0},"hits": {"total": 3,"max_score": 1,"hits": [{"_index": "ecommerce","_type": "product","_id": "2","_score": 1,"_source": {"name": "jiajieshi yagao","desc": "youxiao fangzhu","price": 25,"producer": "jiajieshi producer","tags": ["fangzhu"]}},{"_index": "ecommerce","_type": "product","_id": "1","_score": 1,"_source": {"name": "gaolujie yagao","desc": "gaoxiao meibai","price": 30,"producer": "gaolujie producer","tags": ["meibai","fangzhu"]}},{"_index": "ecommerce","_type": "product","_id": "3","_score": 1,"_source": {"name": "zhonghua yagao","desc": "caoben zhiwu","price": 40,"producer": "zhonghua producer","tags": ["qingxin"]}}]}
}

query string search的由来,因为search参数都是以http请求的query string来附带的

搜索商品名称中包含yagao的商品,而且按照售价降序排序:GET /ecommerce/product/_search?q=name:yagao&sort=price:desc

适用于临时的在命令行使用一些工具,比如curl,快速的发出请求,来检索想要的信息;但是如果查询请求很复杂,是很难去构建的。
在生产环境中,几乎很少使用query string search


2、query DSL

DSL:Domain Specified Language(特定领域的语言)

http request body:请求体,可以用json的格式来构建查询语法,比较方便,可以构建各种复杂的语法,比query string search肯定强大多了。

查询所有的商品:

GET /ecommerce/product/_search
{"query": { "match_all": {} }
}

查询名称包含yagao的商品,同时按照价格降序排序:

GET /ecommerce/product/_search
{"query" : {"match" : {"name" : "yagao"}},"sort": [{ "price": "desc" }]
}

分页查询商品,总共3条商品,假设每页就显示1条商品,现在显示第2页,所以就查出来第2个商品:

GET /ecommerce/product/_search
{"query": { "match_all": {} },"from": 1,"size": 1
}

指定要查询出来商品的名称和价格就可以:

GET /ecommerce/product/_search
{"query": { "match_all": {} },"_source": ["name", "price"]
}

query DSL更加适合生产环境的使用,可以构建复杂的查询。


3、query filter

搜索商品名称包含yagao,而且售价大于25元的商品:

GET /ecommerce/product/_search
{"query" : {"bool" : {"must" : {"match" : {"name" : "yagao" }},"filter" : {"range" : {"price" : { "gt" : 25 } }}}}
}

4、full-text search(全文检索)

GET /ecommerce/product/_search
{"query" : {"match" : {"producer" : "yagao producer"}}
}

producer这个字段,会先被拆解,建立倒排索引

special 4
yagao 4
producer 1,2,3,4
gaolujie 1
zhognhua 3
jiajieshi 2

yagao producer —> yagao和producer

{"took": 4,"timed_out": false,"_shards": {"total": 5,"successful": 5,"failed": 0},"hits": {"total": 4,"max_score": 0.70293105,"hits": [{"_index": "ecommerce","_type": "product","_id": "4","_score": 0.70293105,"_source": {"name": "special yagao","desc": "special meibai","price": 50,"producer": "special yagao producer","tags": ["meibai"]}},{"_index": "ecommerce","_type": "product","_id": "1","_score": 0.25811607,"_source": {"name": "gaolujie yagao","desc": "gaoxiao meibai","price": 30,"producer": "gaolujie producer","tags": ["meibai","fangzhu"]}},{"_index": "ecommerce","_type": "product","_id": "3","_score": 0.25811607,"_source": {"name": "zhonghua yagao","desc": "caoben zhiwu","price": 40,"producer": "zhonghua producer","tags": ["qingxin"]}},{"_index": "ecommerce","_type": "product","_id": "2","_score": 0.1805489,"_source": {"name": "jiajieshi yagao","desc": "youxiao fangzhu","price": 25,"producer": "jiajieshi producer","tags": ["fangzhu"]}}]}
}

5、phrase search(短语搜索)

跟全文检索相对应,相反,全文检索会将输入的搜索串拆解开来,去倒排索引里面去一一匹配,只要能匹配上任意一个拆解后的单词,就可以作为结果返回。
phrase search,要求输入的搜索串,必须在指定的字段文本中,完全包含一模一样的,才可以算匹配,才能作为结果返回。

GET /ecommerce/product/_search
{"query" : {"match_phrase" : {"producer" : "yagao producer"}}
}
{"took": 11,"timed_out": false,"_shards": {"total": 5,"successful": 5,"failed": 0},"hits": {"total": 1,"max_score": 0.70293105,"hits": [{"_index": "ecommerce","_type": "product","_id": "4","_score": 0.70293105,"_source": {"name": "special yagao","desc": "special meibai","price": 50,"producer": "special yagao producer","tags": ["meibai"]}}]}
}

6、highlight search(高亮搜索结果)

GET /my-index2/_search
{"query" : {"match" : {"name" : "xbg"}},"highlight": {"fields" : {"name" : {}}}
}

关键词会高亮:

{"took" : 39,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 2,"relation" : "eq"},"max_score" : 0.75491273,"hits" : [{"_index" : "my-index2","_type" : "_doc","_id" : "O3PbwHEBsOGGEpTGnnwg","_score" : 0.75491273,"_source" : {"name" : "xbg","age" : "23","email" : "123456"},"highlight" : {"name" : ["<em>xbg</em>"]}},{"_index" : "my-index2","_type" : "_doc","_id" : "BnPbwHEBsOGGEpTGWHyE","_score" : 0.5565415,"_source" : {"name" : "xbg ljc","age" : "31","email" : "12345699999"},"highlight" : {"name" : ["<em>xbg</em> ljc"]}}]}
}

ES多种搜索方式总结相关推荐

  1. 07实战之电商网站商品管理:多种搜索方式

    作为准备工作,又重新恢复了之前的3个商品文档 本节主要演示多种搜索方式,关于各种搜索语法后续会详细讲解. 1.query string search 之前也用过这个命令 , 搜索全部商品: GET / ...

  2. #研发解决方案介绍#基于ES的搜索+筛选+排序解决方案

    郑昀 基于胡耀华和王超的设计文档 最后更新于2014/12/3 关键词:ElasticSearch.Lucene.solr.搜索.facet.高可用.可伸缩.mongodb.SearchHub.商品中 ...

  3. 【Elasticsearch】十九种Elasticsearch字符串搜索方式

    1.概述 十九种Elasticsearch字符串搜索方式 刚开始接触Elasticsearch的时候被Elasticsearch的搜索功能搞得晕头转向,每次想在Kibana里面查询某个字段的时候,查出 ...

  4. 【Elasticsearch】十九种Elasticsearch字符串搜索方式终极介绍 各种 查询

    本文为博主九师兄(QQ:541711153 欢迎来探讨技术)原创文章,未经允许博主不允许转载. 可以加我问问题,免费解答,有问题可以先私聊我,本人每天都在线,会帮助需要的人. 但是本博主因为某些原因, ...

  5. powerbi输入数据_Power BI 的多种共享方式

    学而时习之 学而时习之,不亦说乎?有朋自远方来,不亦乐乎?人不知而不愠,不亦君子乎? -- 孔子<论语> 据数据统计,通过温习可掌握80%的所学知识点,为此我们将已推出的课程整理为教程文章 ...

  6. 极兔一面:10亿级ES海量搜索狂飙10倍,该怎么办?

    背景说明: ES高性能全文索引,如果不会用,或者没有用过,在面试中,会非常吃亏. 所以ES的实操和底层原理,大家要好好准备. 另外,ES调优是一个非常.非常核心的面试知识点,大家要非常重视. 在40岁 ...

  7. 视频营销:一款产品如何设计多种赚钱方式

    每个视频,都是你的金牌业务员 这是我写的第40篇视频营销原创文章 与其搜索十年,不如花一年的时间学习,去赚9年的高薪! 大多数人只是在卖产品的本身, 其实任何一款产品都可以设计出多种不同的赚钱方式: ...

  8. MATLAB遗传算法GA求解TSP旅行商问题,可选PMX交叉、OX交叉及其它多种交叉方式,在算法中引入2-opt变异算子

    MATLAB遗传算法GA求解TSP旅行商问题,可选PMX交叉.OX交叉及其它多种交叉方式,在算法中引入2-opt变异算子.进化逆转算子提高算法局部搜索能力,利用国际通用的TSPLIB数据集中的eil5 ...

  9. Elasticsearch(038):es中搜索之入门与分页搜索

    ES中搜索的方式分为两种,一种是通过URL参数进行搜索:另一种是通过POST中body请求参数进行搜索. 针对第一种我们进行简单的讲解,我们关注的核心放在第二种上面. 一.简单搜索(search) 1 ...

最新文章

  1. Android 亲测源码分享
  2. jQuery 遍历函数
  3. 图解:SQL Server SSIS包和job的部署攻略
  4. Android官方开发文档Training系列课程中文版:数据存储之数据库存储
  5. 福建省考计算机专业,2020福建省考,这些报考专业问题你清楚吗?
  6. 【含内推码】字节跳动智能创作2022秋招提前批全面开启!
  7. c语言成绩管理系统不用结构体,不用指针链表和结构体数组怎么编学生成绩管理系统啊...
  8. softmax实现多分类算法推导及代码实现
  9. 宕昌一中2021高考成绩查询,2020届毕业生:宕昌一中“拍了拍”你 | 青春不散场 扬帆再起航...
  10. 【讲座预告】Processing Learner Texts: from Annotation to ...
  11. 在ubuntu10.10下安装Google谷歌拼音输入法
  12. java网吧计费系统源码_基于jsp的网吧计费管理系统-JavaEE实现网吧计费管理系统 - java项目源码...
  13. steam无盘服务器,网吧服务器如何安装steam平台和正版游戏?
  14. ie 无人操作自动关闭_为什么ie11打开未响应然后闪退_win10ie打开就未响应自动关闭的解决方法...
  15. 有了这家公司,谁还去餐馆吃饭
  16. 保护你的聊天隐私---“外挂式”加密软件设计思路
  17. ZBrush中的三种对称类型的完美运用
  18. 用jQuery--实现todolist待办事项清单
  19. 虚拟机登录MySQL
  20. 微信小程序+阿里物联平台+合宙Air724UG搭建无服务器物联系统(五)---合宙Air724UG 4G cat.1硬件设计开源

热门文章

  1. JVM——对象创建与内存分配机制
  2. 二维数组快速排序sort
  3. c语言扫雷程序设计流程图,c语言程序设计扫雷游戏实验报告
  4. win下 conda 虚拟环境没有名字怎么进入
  5. (配对问题)有3箱水果,一箱是苹果,一箱是橘子,一箱是两种水果的混装
  6. 验证码短信平台短信发送失败原因,四大方面全面解读
  7. android8.0/android O 新特性
  8. python学习之timedelta
  9. 0/1背包问题——动态规划、回溯、分支限界法对比
  10. python数据分析简单实例-利用Python进行数据分析――基础示例