扫码阅读
手机扫码阅读
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葵花宝典的其他文章
什么是聚簇索引什么是非聚簇索引
什么是聚簇索引什么是非聚簇索引
今日内容介绍,?
深入Redis内幕:通信协议、内存回收与淘汰策略
深入Redis内幕:通信协议、内存回收与淘汰策略
Spring Cloud Alibaba 注册中心 Nacos 入门
今天主要讲解了Nacos注册中心、Nacos Client(消费者和服务者创建)的搭建过程。
Redis哨兵集群原理讲解和Docker-compose安装Redis哨兵集群
Redis哨兵集群原理讲解和Docker-compose安装Redis哨兵集群
Docker-Compose部署 Elasticsearch(ES集群)
Docker-Compose部署 Elasticsearch(ES集群)
加入社区微信群
与行业大咖零距离交流学习


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