在Elasticsearch中提升

时间:2014-02-05 07:20:06

标签: elasticsearch

我是elasticsearch的新手。在elasticsearch中,我们几乎可以在所有查询中使用术语boost。我知道它用于修改文档的分数。但我无法找到它的实际用途。我怀疑的是,如果我在某些查询中使用提升值,它是否会影响搜索的最终得分或索引本身中文档的提升等级。

在索引提升和查询提升之间的主要区别是什么。

先谢谢..!

2 个答案:

答案 0 :(得分:10)

查询时间提升允许您为一个查询赋予更多权重而不是另一个查询。例如,假设您正在查询“Quick Brown Fox”的titlebody字段,您可以将其写为:

{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "title": "Quick Brown Fox"
          }
        },
        {
          "match": {
            "body": "Quick Brown Fox"
          }
        }
      ]
    }
  }
}

但您决定希望title字段比body字段更重要,这意味着您需要在boost字段上title查询(例如)2:

{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "title": {
              "query": "Quick Brown Fox",
              "boost": 2
            }
          }
        },
        {
          "match": {
            "body": "Quick Brown Fox"
          }
        }
      ]
    }
  }
}

(注意match子句的结构如何更改以容纳boost参数。)

boost的{​​{1}}值不会使2完全加倍 - 分数会经过规范化过程。因此,您应该将_score视为使此查询子句比其他查询子句更重要。

  

我怀疑是否在某些查询中使用了提升值。会影响搜索的最终得分

是的,但你不应该依赖boost的实际价值。其唯一目的是允许Elasticsearch决定哪些文档与此查询最相关 。如果查询更改,则分数会更改。

重新启动索引时间:不要使用它。它不灵活,容易出错。

答案 1 :(得分:1)

查询时的提升不会修改您的索引。它只在搜索时对字段应用提升因子。

我更喜欢在查询时提升,因为它更灵活。如果您需要更改提升规则并且已在索引时设置它,则可能需要重新索引。