Elasticsearch 通过函数分数提升每个字段

标签 elasticsearch lucene solr-boost

我有一个查询,其中包含不同字段的不同查询数据和 ORed 结果。我还想青睐某些领域的热门产品。理想情况下,这只会提高排名,但不会导致不包含其他字段中的某些术语的结果。这会使结果偏向那些具有某些字段的结果。

我认为这曾经被称为 boost,但由于 boost 已从 Lucene 中删除,Elasticsearch 已将它们替换为函数分数,我不明白如何将它们添加到我的查询中。

查询如下所示:

POST /index/type/_search
{
    "query": {
        "bool": {
            "should": [{
                "terms": {
                    "field1": ["67", "93", "73", "78", "88", "77"]
                }
            }, {
                "terms": {
                    "field2": ["68", "94", "72", "76", "82", "96", "70", "86", "81", "92", "97", "74", "91", "85"]
                }
            }, {
                "terms": {
                    "category": ["cat2"]
                }
            }]
        }
    }
}

在所有可能的命中中,我希望将排名偏向那些包含 catagory 字段中的术语的结果。

最佳答案

_boost 字段(文档级提升)已被删除,但field-level boosts ,和query boosts仍然工作得很好。看起来您正在寻找查询提升。

因此,如果您想增强 field1 上的匹配:

"bool": {
    "should": [{
        "terms": {
            "field1": ["67", "93", "73", "78", "88", "77"],
            "boost": 2.0
        }
    }, {
        "terms": {
            "field2": ["68", "94", "72", "76", "82", "96", "70", "86", "81", "92", "97", "74", "91", "85"]
        }
    }, {
        "terms": {
            "category": ["cat2"]
        }
    }]
}

关于Elasticsearch 通过函数分数提升每个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30897078/

相关文章:

java - Lucene:IndexSearcher.search() 在非常大的数据库上导致 java 堆空间错误

c# - Lucene .NET 搜索结果

solr - 如何在 Solr 中进行常量分数查询

java - ElasticSearch Boost 字段并按日期排序

使用 random_score 的 elasticsearch 会降低性能

elasticsearch - 如何在 ElasticSearch 中进行嵌套聚合,其中聚合超过子聚合的结果

unit-testing - 模拟Elasticsearch聚合

elasticsearch - azure evenhub 插件和 Filebeat azure 模块的区别

elasticsearch - elasticsearch节点有多少个分片

Solr 精确匹配提升 减少结果