是否可以根据标签数量更改评分配置文件?

Is it possible to change the scoring profile based on the number of tags?

我有一个包含字符串集合的文档,这些字符串表示该文档在某个区域(标签)中出现的次数。例如:

[{
  "id": "A"
  // other properties
  "regions": ["3", "3", "3", "2"] // Appears 3 times in region "3" and once in region "2"
},
{
  "id": "B"
  // other properties
  "regions": ["3", "3", "1"] // Appears twice in region "3" and once in region "1"
}]

我尝试使用 Tag 类型的自定义评分配置文件,但我不知道如何为包含更多区域的文档提供更好的分数。换句话说,我希望在 region 3 中出现 3 次的 document Aregion 3 中只出现两次的 document B 之前显示。

仅供参考,我们选择以这种方式表示区域的原因是因为区域太多,并非所有文档都出现在所有区域中。更多详情

这可行吗?这条路还是另一条路?

标签评分配置文件检查标签是否存在。如果标签出现多次,则对分数没有影响。

我读过你的另一本 post 。您可以考虑的一种解决方案(这不完全是您想要的)是根据计数对区域进行分桶。例如,您有一个区域集合,其中文档出现次数少于 10 次,在 10 到 50 之间,在 50 到 100 之间(以对场景中区域出现的分布有意义的方式选择范围) .您的文档将如下所示:

{
  "id": "A"
  "regions10": ["3", "2"] // Appears in region 3 and 2 less than 10 times
  "regions50": ["1"] // Appears in region 1 between 10 and 50 times
}

然后,您可以使用权重评分配置文件来提升在较高计数区域中匹配的文档:

 "scoringProfiles": [  
    {  
      "name": "boostRegions",  
      "text": {  
        "weights": {  
          "regions10": 1,  
          "regions50": 2,  
          "regions100": 3  
        }  
      }  
    }

如果您需要根据区域计数进行严格排序,无法预先计算区域计数,或者值的整个范围很大(比如 0 到 2^31),而个别桶需要很小(你最终会得到太多字段)。

您遇到的问题是数据建模问题。您正在尝试根据文档的 属性 检索文档,即它是否包含一组区域中的一个区域,但是 score/boost 基于区域属性的文档,而不是文档。您必须在每个文档-区域对的索引中有一个文档,一个 属性 以及给定文档在该区域出现的次数。