Elasticsearch _boost已弃用。还有其他选择

时间:2014-08-14 17:04:13

标签: lucene elasticsearch mapping

基本上是_boost,这是一个映射选项,可以为字段提供一定的提升is now deprecated

该页面建议使用" function score代替boost"。但功能评分意味着:

  

function_score允许您修改查询检索的文档的分数

所以它甚至都不是替代品。功能分数只是在查询时修改文档的分数。

我如何在映射时改变 a field 的相关性?

该选项不再有效?删除了没有替换?

3 个答案:

答案 0 :(得分:1)

功能评分查询可用于提升整个文档。如果您想使用字段提升,则可以使用multi match queryterm query来执行此操作。

答案 1 :(得分:1)

该选项不再有效,且没有直接替换。问题是从Ecesearch运行的Lucene 4.0中删除了索引时间提升。然后Elasticsearch使用它自己的实现,它有自己的问题。可以在此处找到有关这些问题的详细说明:http://blog.brusic.com/2014/02/document-boosting-in-elasticsearch.html以及此时索引时弃用提升的问题:https://github.com/elasticsearch/elasticsearch/issues/4664

总而言之,它基本上没有以透明和可理解的方式工作 - 你可以将一个文档增加100,将另一个文档增加50,使用相同的关键字并获得相同的分数。因此决定将其删除并依赖于功能评分查询,这些查询具有更加透明和可预测的评分影响。

如果您觉得功能评分查询不符合您的需求和用例,我会在github中打开一个问题并解释您的情况。

答案 2 :(得分:1)

我不了解您的情况,但我相信您有充分理由在索引时提升文件。总是建议在"查询" as"索引"如果您的提升标准发生变化,则时间提升将需要重新索引数据。据说,在我的应用程序中,我们实现了Index& amp;查询时间提升,我们正在使用

  1. 索引时间提升(文档提升),以提升一些我们知道将永远是我们的搜索TOPHIT的文档。例如用词搜索" google"应始终放置包含" google.com"最热门的。我们使用自定义boost字段和自定义提升脚本来实现此目的。请参阅此链接:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-scripting.html
  2. 查询时间提升(每个字段提升),我们使用ES java API来执行我们的查询,我们在查询时将字段级提升应用于每个字段,因为它具有高度灵活性。允许我们在不重新索引整个数据集的情况下更改字段级别提升。
  3. 您可以查看此内容,它可能对您有所帮助:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#_field_value_factor

    我已在此处描述了我的完整用例,希望您会发现它有用。