ElasticSearch之bool多条件查询

写在前面

在实际的业务场景中,不可能只是简单的单值查询 ,更多的是n个条件的综合查询,就像下面的搜索:

针对这种场景我们就需要依赖于bool查询了,本文就一起来看下这部分的内容。

1:bool查询介绍

bool查询用于进行多条件的组合查询,如果是需要计算得分的,则取各个查询的得分之和作为最终得分。bool查询包含四种子查询,must,must_not,should,filter,如下:

实例:

不影响算分的filter和must_not:

影响算分的should和must:

bool的多层嵌套:

相同等级,算分权重相同:

通过boost影响字段的算分权重:

2:实例

2.1:shoud+boost

boost是一个影响的分权中的参数,会被应用在计算得分的公式中影响最终的得分。

看下should用法,以及如何通过boost影响should的得分,准备数据:

DELETE blogs
POST blogs/_bulk
{"index": {"_id": 1}}
{"title":"Apple iPad","content":"Apple iPad,Apple iPad"}
{"index": {"_id": 2}}
{"title":"Apple iPad,Apple iPad","content":"Apple iPad"}

我们把相反的内容放到了两个文档里,接下来通过调整title和content查询的boost来影响这两个文档的最终得分,即影响其返回的的顺序。

POST blogs/_search
{
    "query": {
        "bool": {
            "should": [
                {
                    "match": {
                        "title": {
                            "query": "apple,ipad",
                            "boost": 1.1
                        }
                    }
                },
                {
                    "match": {
                        "content": {
                            "query": "apple,ipad",
                            "boost": 1
                        }
                    }
                }
            ]
        }
    }
}

上述查询给了title更高的权重,并且title针对查询的TF(term frequency)更高,所以"_id" : "2"有更高的总得分,被放在结果集的前面,类似的我们也可以调高content的boost,则"_id" : "1"有更高的总得分,被放在结果集的前面:

2.2:boosting+negative+positive

是should查询。

通过boosting+negative+positive来影响得分,其中negative用来给匹配的结果给负分,即减分,positive给匹配的结果正分,即加分,数据:

delete news
POST news/_bulk
{"index": {"_id": 1}}
{"content":"Apple Mac"}
{"index": {"_id": 2}}
{"content":"Apple iPad"}
{"index": {"_id": 3}}
{"content":"Apple employee like Apple and Apple Juice"}

假定我们想让苹果公司产品相关的文档有更高的优先级,即放在结果集的更靠前位置,而非苹果产品的文档放在靠后位置,其中文档1,2是评估产品,而3不是苹果产品,如下方式查询满足需求:

POST news/_search
{
    "query": {
        "boosting": {
            "positive": {
                "match": {
                    "content": "apple"
                }
            },
            "negative": {
                "match": {
                    "content": "Juice"
                }
            },
            "negative_boost": 0.5
        }
    }
}

写在后面

参考文章列表

ElasticSearch之search API

相关推荐
kngines8 小时前
【实战ES】实战 Elasticsearch:快速上手与深度实践-3.1.3高亮与排序的性能陷阱
大数据·elasticsearch·搜索引擎
palomua11 小时前
25.3.7#Git命令#merge和rebase的区别
大数据·git·elasticsearch
我的ID配享太庙呀11 小时前
Centos的ElasticSearch安装教程
运维·计算机网络·elasticsearch·centos·智能路由器·jenkins·es
花晓木13 小时前
Filebeat收集nginx日志到elasticsearch,最终在kibana做展示。
运维·nginx·elasticsearch
Elastic开源社区14 小时前
Elastic如何获取当前系统时间
elasticsearch·es·系统时间
Kale又菜又爱玩16 小时前
ElasticSearch 入门教程
大数据·elasticsearch·搜索引擎
冬天vs不冷17 小时前
IDEA中Git版本回退终极指南:Reset与Revert双方案详解
git·elasticsearch·intellij-idea
Elasticsearch1 天前
Elasticsearch:使用 BigQuery 提取数据
elasticsearch
栀栀栀栀栀栀1 天前
Elasticsearch 2025/3/7
大数据·elasticsearch·搜索引擎
铭毅天下1 天前
基于 Qwen2.5-14B + Elasticsearch RAG 的大数据知识库智能问答系统
大数据·elasticsearch·搜索引擎·全文检索