代码之家  ›  专栏  ›  技术社区  ›  Jonas Stawski

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

  •  0
  • Jonas Stawski  · 技术社区  · 6 年前

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

    [{
      "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 ,但我不知道如何为具有更多区域的文档提供更好的分数。换句话说,我想要 document A 在中出现3次 region 3 在之前显示 document B 在中仅出现两次 区域3 .

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

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Yahnoosh    6 年前

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

    我读了你的另一篇帖子 here . 您可以考虑的一个解决方案(这并不完全是您想要的)是基于count对区域进行bucket。例如,您有一个区域集合,其中文档显示不到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),而单个存储桶需要很小(最终会有太多字段),那么这不是一个好的解决方案。

    您遇到的问题是数据建模问题。您正在尝试根据文档的属性检索文档,即它是否在一组区域中包含一个区域,但根据区域而不是文档的属性对文档进行评分/提升。您必须在每个文档区域的索引中包含一个文档,并将一个属性与给定文档在该区域中出现的次数配对。