扫码阅读
手机扫码阅读
Elasticsearch(ES)的DSL语法与搜索

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

springboot葵花宝典
扫码关注公众号
Elasticsearch DSL查询与搜索功能概述
1. DSL查询分类
Elasticsearch提供基于JSON的DSL语法来定义查询,主要包括以下类型:
- 查询所有:返回所有文档,常用于测试。
-
全文检索查询:通过分词器匹配词条,例如
match_query
和multi_match_query
。 -
精确查询:用于精确匹配关键词、数值、日期等字段,例如
term
和range
。 -
地理查询:基于经纬度匹配,例如
geo_distance
和geo_bounding_box
。 -
复合查询:组合多种查询条件,例如
bool
和function_score
。
2. 全文检索查询
全文检索通过分词器对用户输入内容进行分词并匹配倒排索引库,常见的使用场景包括搜索引擎、商城搜索、社交媒体等。
基本语法如下:
- match查询:单字段匹配。
- multi_match查询:多字段匹配。
示例:
GET /wineshop/_search { "query": { "match": { "business": "公园" } } }
总结:match用于单字段查询;multi_match匹配多个字段,但性能会有所下降。
3. 精确查询
精确查询不会对搜索内容进行分词,适用于keyword、数值和日期字段。常见类型包括:
- term:精确匹配单个词条。
- range:匹配数值或日期范围。
示例:
GET /wineshop/_search { "query": { "term": { "city": { "value": "北京上海" } } } }
4. 地理查询
地理查询用于根据经纬度匹配数据,常见场景包括附近酒店搜索、附近人查询等。
- geo_bounding_box:矩形范围查询。
- geo_distance:距离查询,基于圆形范围匹配。
示例:
GET /wineshop/_search { "query": { "geo_distance": { "distance": "15km", "location": "31.242201,121.509106" } } }
5. 复合查询
复合查询结合多种查询条件以实现复杂逻辑,主要包括:
- function_score:可调整相关性打分。
- bool:通过逻辑关系组合多个子查询。
示例:使用function_score提高某品牌酒店的排名:
GET /wineshop/_search { "query": { "function_score": { "query": { "match": { "all": "外滩" } }, "functions": [ { "filter": { "term": { "brand": "七天" } }, "weight": 2 } ], "boost_mode": "sum" } } }
总结:function_score允许自定义打分逻辑;bool查询支持must(与)、should(或)、must_not(非)、filter(过滤条件)。
6. 布尔查询
布尔查询结合多个子条件以实现复杂搜索,支持以下逻辑关系:
- must:必须满足的条件。
- should:可选条件。
- must_not:必须不匹配的条件。
- filter:过滤条件,不参与打分。
示例:
GET /wineshop/_search { "query": { "bool": { "must": [ {"match": { "name": "如家" }} ], "must_not": [ {"range": { "price": { "gt": 400 }}} ], "filter": [ {"geo_distance": { "distance": "10km", "location": { "lat": 31.21, "lon": 121.5 } }} ] } } }
总结:bool查询通过逻辑关系组合条件,适合复杂搜索需求。
关注与支持:欢迎点赞、收藏和关注以获取更多内容。
想要了解更多内容?

springboot葵花宝典
扫码关注公众号
springboot葵花宝典的其他文章
SpringBoot-11-文件的上传和下载
本章节我们主要进行SpringBoot文件上传和下载以及的介绍涉及到Thumeleaf以及静态资源的设置,因为我们在进行项目开发的时候,经常会遇见需要用到文件上传和下载的时候,例如:通知文档下载,辞职报告模板的下载,员工批量录入需要文件上传
SpringBoot-29-RestTemplate的Get请求使用详解
SpringBoot-29-RestTemplate的Get请求使用详解
Freemarker快速入门:创建动态模板引擎
在现代Web开发中,动态生成内容是非常常见的需求。为了更好地将数据与界面结合,使用模板引擎是一种有效的方式。本文将向你介绍Freemarker,一个强大的Java模板引擎,帮助你快速创建动态模板。
SpringBoot多级缓存解决方案
SpringBoot实现项目更删改查后,会有新的问题需要解决,就是并发大的问题,一般而言,解决查询并发大的问题,常见的手段是为查询接口增加缓存,从而可以减轻持久层的压力。
Nginx快速入门
Nginx快速入门
加入社区微信群
与行业大咖零距离交流学习


PMO实践白皮书
白皮书上线
白皮书上线