Elasticsearch 中权重和提升的区别

Abh*_*tti 6 elasticsearch solr-boost

我阅读了有关在 Elasticsearch 中提升的内容。我们可以在索引或查询时应用 boosting。索引时间提升是一种静态提升,不建议使用。查询时间提升本质上是动态的。查询时间提升是很好的首选方法。

我们还可以为字段添加增强功能。例如,我们在多个字段中搜索一个术语。我们可以提升一个字段来改变文档的分数。

{
   "match":{"title":{"query":"test string","boost":10}}
},
Run Code Online (Sandbox Code Playgroud)

我读过体重。

{
     "filter": { "match": { "test": "cat" } },
     "weight": 42
}
Run Code Online (Sandbox Code Playgroud)

我的理解是在字段上应用权重以改变相关性或分数。Boost 应用于查询以更改相关性或分数。

但我不确定重量和提升的差异。

有人可以通过一些例子纠正我理解重量和提升之间的区别吗?

Chr*_*ris 12

1. Elastic Search 中的相关性调整正在改变字段之间的加权方式,或者提高字段内给定值的相关性。注意:您必须至少有两个架构字段才能调整相关性。

2. 权重应用于字段增强设置在字段之上,但它们应用于字段值

3. 重量

  • 每个字段的可能权重为 0 到 10,其中 10 是最重要的权重。

    curl -X GET 'https://host-2376rb.api.swiftype.com/api/as/v1/engines/national-parks-demo/search'
    -H '内容类型:application/json'
    -H '授权: 不记名搜索-soaewu2ye6uc45dr8mcd54v8'
    -d '{ "search_fields": { "title": { "weight": 10 }, "description": { "weight": 1 }, "states": { "weight": 2 } }, "查询": "山" }'

在这里,我们要求仅返回结果中的三个字段:标题、描述和状态。我们对每个字段进行加权:分别为 10、1 和 2。

4. 提升

  • Boost 有 4 种。使用提升来增加相关性。

    { “查询” : { “dis_max” : { “查询” : [ { “匹配” : { “资格” : { “查询” : “社交媒体”, “提升” : 2 } } }, { “匹配” : { "cover_letter" : "社交媒体" } } ] } } }

在这里,我们为在简历中列出“社交媒体”的求职者添加了析取最大查询。此示例将“资格”字段中的查询匹配度提高了 2 倍,而如果“社交媒体”出现在 cover_letter 字段中则不会提高任何值。

在这些示例中,无论如何,权重都硬固定到字段,其中提升硬固定在查询“社交媒体”上,但前提是它在资格字段内匹配。希望这可以帮助..

  1. 关于此事的 Elastic Search 文档
  2. 一个非常好的 Boosting 示例,包括 negative_boost、field_value_factor 和基于日期的权重衰减
  3. 关于此事的其他非常有用的链接boost_1boost_2boost_3boost_4Weight_1


小智 5

字段相互加权,而提升是基于字段内的给定值。

权重:每个字段的可能权重为 0 到 10,其中 10 是最重要的权重。例如:如果我们希望人们根据查询找到他们正在寻找的页面,那么我们需要优先考虑标题字段。我们可以增加它的权重,使其比其他领域更有影响力。如果标题的权重较高,人们会在顶部的标题中找到该页面所在的文档。

{
  "search_fields":{ 
    "title": { 
      "weight": 10 
    }, 
    "subtitle": { 
      "weight": 5 
    }, 
    "description": { 
      "weight": 2 
    } 
  }, 
  "query": "Elastic" 
}
Run Code Online (Sandbox Code Playgroud)

这里我们请求elastic只返回3个字段,即标题、副标题、描述,对应的权重为10、5、2。

Boosts:权重应用于字段。增强设置在字段之上,但它们应用于字段值。在数字、日期或地理位置字段上进行提升时,您需要定义函数参数和因子。根据 boost 的不同,函数有四种类型:线性、指数、高斯和对数。该函数和因子用于计算提升的相关性得分的一半,称为提升值。另一半是原始文档分数。它们结合起来产生总体文档分数,该分数控制结果集的顺序

{
  "query": "Elastic", 
  "boosts": {
    "is_elastic_query": [ 
      { 
        "type": "value", 
        "value": "true", 
        "operation": "multiply", 
        "factor": 10 
      } 
      ] 
  } 
}
Run Code Online (Sandbox Code Playgroud)

这里我们假设 is_elastic_query 是一个值为 true 或 false 的字段。如果该值为真,我们将使用值提升 10 倍来提升它。

有关详细信息和示例,请访问以下链接:

https://www.elastic.co/guide/en/app-search/current/relevance-tuning-guide.html