Elasticsearch Queries

Elasticsearch Compound Queries

Elasticsearch 的 Compound Queries 是一种强大的工具,用于组合多个查询子句,以实现更复杂的搜索逻辑。这些查询子句可以是叶查询(Leaf Queries)或复合查询(Compound Queries),并且可以用于组合结果和分数、改变行为或从查询上下文切换到过滤上下文。

主要的复合查询类型

bool 查询:

用于组合多个叶查询或复合查询子句,支持 must、should、must_not 和 filter 子句。must 和 should 子句的分数会被合并,而 must_not 和 filter 子句在过滤上下文中执行。

JSON复制

GET /products/_search

{

"query": {

"bool": {

"must": [

{ "match": { "description": "wireless headphones" } }

],

"filter": [

{ "term": { "brand": "BrandA" } }

],

"should": [

{ "range": { "price": { "lte": 100 } } }

],

"must_not": [

{ "term": { "color": "red" } }

]

}

}

}

boosting 查询:

返回匹配 positive 查询的文档,但会降低也匹配 negative 查询的文档的分数。

JSON复制

{

"query": {

"boosting": {

"positive": { "match": { "content": "multiple queries" }},

"negative": { "term": { "status": "archived" }},

"negative_boost": 0.5

}

}

}

constant_score 查询:

包装另一个查询,但在过滤上下文中执行它。所有匹配的文档都将获得相同的"常量" _score。

dis_max 查询:

接受多个查询,并返回匹配任何查询子句的文档。与 bool 查询合并所有匹配查询的分数不同,dis_max 查询使用单个最佳匹配查询子句的分数。

JSON复制

{

"query": {

"dis_max": {

"queries": [

{ "match": { "name": "kimchy" }},

{ "match": { "name": "elasticsearch" }}

],

"boost": 1.2,

"tie_breaker": 0.7

}

}

}

function_score 查询:

使用函数修改主查询返回的分数,考虑因素如流行度、最近性、距离或通过脚本实现的自定义算法。

JSON复制

{

"query": {

"function_score": {

"query": { "match": { "name": "kimchy" }},

"functions": [

{ "random_score": { "seed": 1234 }},

{ "exponential_decay": { "field": "age", "origin": 0, "scale": 1 }}

],

"score_mode": "multiply"

}

}

}

使用场景

组合多个条件:使用 bool 查询组合多个搜索条件,例如同时匹配多个字段。

调整查询权重:使用 boosting 查询调整某些文档的权重。

固定分数:使用 constant_score 查询为所有匹配文档分配固定分数。

选择最佳匹配:使用 dis_max 查询选择最佳匹配的查询子句。

自定义评分:使用 function_score 查询根据自定义逻辑调整文档分数。

通过合理使用这些复合查询,您可以构建更复杂、更灵活的搜索逻辑,以满足不同的业务需求。

相关推荐
爱莉希雅&&&2 小时前
elasticsearch+kibana+logstash+filebeat链路部署流程
大数据·elasticsearch·搜索引擎·kibana·logstash·filebeat
前端 贾公子3 小时前
Git Worktree 使用指南
大数据·elasticsearch·搜索引擎
Elasticsearch4 小时前
如何使用 OpenTelemetry 对你的搜索 API 进行埋点,并使用 ES|QL 对其进行查询
elasticsearch
阿里云大数据AI技术17 小时前
更快、更稳、更省:揭秘阿里云 Elasticsearch 存算分离与弹性扩缩
elasticsearch
阿里云大数据AI技术18 小时前
Search Lake:ES x Paimon 让湖上多模态数据可搜可用
人工智能·elasticsearch·搜索引擎
Elasticsearch1 天前
Elastic 如何利用磁盘支持的追踪存储将 OpenTelemetry 尾部采样内存占用降低 65%
elasticsearch
.柒宇.1 天前
ELK日志分析系统实战指南:Elasticsearch搭建与入门(8.18.8版本)
运维·elk·elasticsearch·logback·日志系统
Linux-18742 天前
分布式链路追踪系统之二进制安装skywalking
elasticsearch·云原生·skywalking·分布式链路追踪系统·应用程序性能监控
阿里云大数据AI技术2 天前
阿里云 Elasticsearch 日志采集与加工服务:让日志链路少一串组件,多一份稳定
人工智能·elasticsearch
heimeiyingwang2 天前
【架构实战】可观测性三支柱:日志、指标、链路的融合
elasticsearch·架构·kubernetes