【问题标题】:Elasticsearch boost per field with function scoreElasticsearch 通过功能得分提升每个字段
【发布时间】:2015-06-17 16:17:57
【问题描述】:

我有一个针对不同字段和 ORed 结果的不同查询数据的查询。我也想偏爱某些领域的热门歌曲。理想情况下,这只会增加排名,但不会导致结果不包含其他字段中的某些术语。这会使结果偏向具有某些字段的结果。

我认为这曾经被称为提升,但由于提升已从 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(但 ES 中存在 boost)和 function_score,但是您确定这是问题的解决方案吗?问题是什么?请您重新表述问题并说明您有什么,您需要实现什么,到目前为止您尝试过什么以及为什么您不喜欢您尝试过的东西?
  • 例如,您可以在查询 dsl 中使用提升字段:elastic.co/guide/en/elasticsearch/reference/current/…

标签: elasticsearch lucene solr-boost


【解决方案1】:

_boost 字段(文档级提升)已被删除,但 field-level boostsquery 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"]
        }
    }]
}

【讨论】:

  • 将提升移动到正确的字段,但经过测试并且运行良好。是否也可以根据在字段中包含一组术语进行过滤,比如我猜想用一个非常大的数字进行提升?
  • @pferrel 不确定我是否关注。如果您想获得 only 匹配该字段的结果,您可能希望将它们添加到 bool 查询的 "must" 子句中,而不是应该添加。你是这个意思吗? terms filter 也可以(结果集相同,但得分和性能可能会有所不同)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-08
  • 1970-01-01
  • 2017-06-16
  • 2013-03-02
  • 1970-01-01
  • 2013-12-24
相关资源
最近更新 更多