在Elasticearch中提升

ttcibm8c  于 2022-10-06  发布在  ElasticSearch
关注(0)|答案(3)|浏览(170)

我是ElasticSearch的新手。在ElasticSearch中,我们几乎可以在所有查询中使用术语Boost。我知道它是用来修改单据分数的。但我找不到它的实际用途。我的问题是,如果我在一些查询中使用Boost值,它是否会影响搜索的最终分数或文档在索引本身中的Boost排名。

Boost at index和Boost at Query的主要区别是什么?

提前谢谢..!

qojgxg4l

qojgxg4l1#

Query Time Boost允许您为一个查询赋予比另一个查询更大的权重。例如,假设您正在查询“Quick Brown Fox”的titlebody字段,您可以将其编写为:

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

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

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

(请注意match子句的结构如何更改以适应boost参数)。

2boost值并不是_score的两倍--分数会经过标准化过程。因此,您应该将boost视为使此查询子句相对比其他查询子句更重要
我怀疑我是否在某些查询中使用了Boost值。会不会影响搜索的最终得分

是的,但无论如何都不应该依赖_score的实际值。它的唯一目的是允许Elasticearch决定哪些文档与此查询最相关**。如果查询更改,分数也会更改。

Re索引时间提升:不要使用它。它不灵活,而且容易出错。

deikduxw

deikduxw2#

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

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

bzzcjhmw

bzzcjhmw3#

提升的用例:假设您正在构建一个电子商务Web应用程序,您的产品数据在ElasticSearch中。每当客户使用搜索栏时,您都可以查询ElasticSearch,并在Web应用程序中显示结果。Elastic Search保留每个文档的相关性分数,并按相关性分数的排序顺序返回结果。现在假设用户搜索“Samsung Phones”,那么您的Web应用程序是否应该只显示Samsung Phones->答案是否定的。你的Web应用程序也应该显示其他手机(因为用户可能也喜欢这些手机),但首先显示三星手机(因为他/她正在寻找那些手机),然后再显示其他手机。

所以问题是,你如何查询三星手机在搜索结果中的排名?->答案是相关性分数。假设你点击了所有手机和三星手机的查询点赞,并保持三星手机的高相关性分数,那么结果将首先包含三星手机,然后是其他手机。

相关问题