ElasticSearch代码常用关键词

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 查询操纵一个文档的权重提升方式而跳过归一化这一步骤。

 

posted @   白玉神驹  阅读(66)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示