首页 > 其他分享 >ElasticSearch组合多查询(must, should, must_not, filter)

ElasticSearch组合多查询(must, should, must_not, filter)

时间:2023-05-11 15:56:09浏览次数:49  
标签:语句 content should filter 文档 query boost must

ElasticSearch组合多查询(must, should, must_not, filter)

举个例子

if (StringUtils.isNotEmpty(goodsSpu.getCategoryId())){
    filterBuilder.must(QueryBuilders.wildcardQuery("categoryId", "*"+goodsSpu.getCategoryId()+"*"));
}

1.must

文档 必须 匹配这些条件才能被包含进来。

相当于sql中的 and

2.must_not

文档 必须不 匹配这些条件才能被包含进来。

相当于sql中的 not

3.should

如果满足这些语句中的任意语句,将增加 _score ,否则,无任何影响。它们主要用于修正每个文档的相关性得分。

相当于sql中的or

4.filter

必须 匹配,但它以不评分、过滤模式来进行。这些语句对评分没有贡献,只是根据过滤标准来排除或包含文档。

每一个子查询都独自地计算文档的相关性得分。

Es查询语句提升权重,boost关键词

官方文档

一个简单得bool查询

GET /_search
{
    "query": {
        "bool": {
            "must": {
                "match": {
                    "content": { 
                        "query":    "full text search",
                        "operator": "and"
                    }
                }
            },
            "should": [ 
                { "match": { "content": "Elasticsearch" }},
                { "match": { "content": "Lucene"        }}
            ]
        }
    }
}

1. content 字段必须包含 full 、 text 和 search 所有三个词。

2. 如果 content 字段也包含 Elasticsearch 或 Lucene ,文档会获得更高的评分 _score 。

3. hould 语句匹配得越多表示文档的相关度越高

让包含 Lucene 的有更高的权重,并且包含 Elasticsearch 的语句比 Lucene 的权重更高

GET /_search
{
    "query": {
        "bool": {
            "must": {
                "match": {  
                    "content": {
                        "query":    "full text search",
                        "operator": "and"
                    }
                }
            },
            "should": [
                { "match": {
                    "content": {
                        "query": "Elasticsearch",
                        "boost": 3 
                    }
                }},
                { "match": {
                    "content": {
                        "query": "Lucene",
                        "boost": 2 
                    }
                }}
            ]
        }
    }
}

1. 这些语句使用默认的 boost 值 1 。

2. 这条语句更为重要,因为它有最高的 boost 值。

3. 这条语句比使用默认值的更重要,但它的重要性不及 Elasticsearch 语句。

4. boost 参数被用来提升一个语句的相对权重( boost 值大于 1 )或降低相对权重( boost 值处于 0 到 1 之间),但是这种提升或降低并不是线性的,换句话说,如果一个 boost 值为 2 ,并不能获得两倍的评分 _score 。

5. 相反,新的评分 _score 会在应用权重提升之后被 归一化 ,每种类型的查询都有自己的归一算法,简单的说,更高的 boost 值为我们带来更高的评分 _score 。

6. 如果不基于 TF/IDF 要实现自己的评分模型,我们就需要对权重提升的过程能有更多控制,可以使用 function_score 查询操纵一个文档的权重提升方式而跳过归一化这一步骤。

 

标签:语句,content,should,filter,文档,query,boost,must
From: https://www.cnblogs.com/cgy-home/p/17391245.html

相关文章

  • k8s证书续签及异常:You must be logged in to the server
    1、证书续签(k8smaster节点执行):  #备份kubernetes配置sudocp-r/etc/kubernetes/etc/kubernetes_bak#更新证书sudokubeadmcertsrenewall#查看证书过期时间sudokubeadmcertscheck-expiration#删除conf文件sudorm-rf/etc/kubernetes/*.conf#重新生......
  • Component name "tag" should always be multi-word.
    Componentname"tag"shouldalwaysbemulti-word.这种错误通常是由于编码规范或代码风格指南中的命名规范没有被遵守所导致的。vue中,我命名一个组件叫tag好像不符合规范,应该怎么命名?在Vue中,如果你要命名一个组件,可以采用驼峰式命名法,即使用多个单词组成的名称,每个单词的首......
  • [记录一下]lazarus memdataset的filter问题
    在lazarus使用memdataset时,如果filter按下面的方法是得不到想要结果:MEMDataSet1.Filtered:=false;MEMDataSet1.Filter:='tasknameLike'+quotedstr('%'+Edit4.Text+'%');MEMDataSet1.Filtered:=true;最后在官网找到解决办法:unitUnit1;{$modeobjfpc}{$......
  • python 小技巧, 列表生成式比 filter(lambda x:x>=0,data) 快, iteritems()方法,
    题目经timeit测试列表生成式比filter(lambdax:x>=0,data)快python2的dict的iteritems()方法,pyhton3可以看看有没有......
  • 简单filter权限控制
    download。jsp<%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><title>download</title></head><body><ahref="">ziyau1</a><ahref="&quo......
  • Mixed Content: xxx This request has been blocked; the content must be served ove
    1.情景展示这是教师资格证,准考证的下载界面。当我们去点击“下载准考证”的时候,你将发现点击该按钮并没有反应。按F12,打开开发者工具。该网站,会自动进入断点调试模式,目的是为了:禁止前端开发者查看网页代码之类的吧。我们要想看看,为什么无法下载准考证,就不能够被它拦住。......
  • ERROR: All flavors must now belong to a named flavor dimension. Affected
    在ijkplayer-example的build.gradle中  添加flavorDimensions"800800",其中的800800为project:build.gradle中的versionCode=800800值一样。 3.   AGPBI:{"kind":"error","text":"error:\u0027@@array/pref_entries_player\u0027......
  • SpringCloud gateway HttpHeadersFilters
    HttpHeadersFilter在将请求发送到下游之前应用于请求,例如在NettyRoutingFilter中。1、ForwardedHeadersFilterForwardedHeadersFilter创建一个Forwarded标头以发送到下游服务。它将当前请求的Host标头、scheme和端口添加到任何现有的Forwarded标头中。2、RemoveHopByHopH......
  • java filter过滤器 读取配置文件properties的值
    http://www.yayihouse.com/yayishuwu/chapter/29811.获取application.properties的值如userId=1 2.一般实体中采用@Value既可获取@Value("userIdl")privateStringuserId; 但是在filter中,需要用上下文对象来获取filter的生命周期如下:web应用程序启动时,web服务器将创......
  • Error:All flavors must now belong to a named flavor dimension. Learn more at
    {https://blog.csdn.net/qq_15807167/article/details/79528063}  这是plugin3.0.0之后有一种自动匹配消耗库的机制,便于debugvariant自动消耗一个库,然后就是必须要所有的flavor都属于同一个维   defaultConfig{ targetSdkVersion:*** minSdkVersion:*** versi......