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

相关推荐
一勺菠萝丶9 小时前
Git Tag 使用教程:如何打 Tag、切换 Tag、推送 Tag 和删除 Tag
大数据·git·elasticsearch
Elastic 中国社区官方博客12 小时前
Kibana 中的 AI Chat 现在可以原生渲染仪表板
大数据·数据库·人工智能·elasticsearch·搜索引擎·云原生
Elastic 中国社区官方博客13 小时前
Elastic 的 ML 与 AI Assistant 如何将 NOC 中 802.1x 故障排查时间从 20 分钟缩短到数秒
大数据·运维·人工智能·elasticsearch·搜索引擎·全文检索·可用性测试
Gavin-Wang13 小时前
swift 项目 commit 规范
大数据·elasticsearch·搜索引擎
Wils0nEdwards1 天前
Windows本地 git 版本管理
windows·git·elasticsearch
不吃鱼的羊1 天前
提交代码添加Change-Id
大数据·elasticsearch·搜索引擎
逸Y 仙X1 天前
文章四:Elasticsearch 的扩容与集群升级
java·大数据·elasticsearch·搜索引擎·全文检索
逆境不可逃2 天前
【与我学 ClaudeCode】协作篇 之 Worktree + Task Isolation :目录隔离的并行执行通道
大数据·elasticsearch·搜索引擎
逸Y 仙X2 天前
Elasticsearch安全集群构建的常见问题
java·大数据·安全·elasticsearch·搜索引擎·全文检索
Lyyaoo.2 天前
ES快速入门
大数据·elasticsearch·搜索引擎