弹性搜索阵列得分

Ren*_* Xu 6 arrays elasticsearch

我有一个文件就像一个数组

DOC1

{
"item_type":"bag",
"color":["red","blue","green","orange"]
}
Run Code Online (Sandbox Code Playgroud)

DOC2

{
"item_type":"shirt",
"color":["red"]
}
Run Code Online (Sandbox Code Playgroud)

当我进行multi_match搜索时

{ "query": { "multi_match": { "query": "red bag", "type": "cross_fields", "fields": ["item_type","color"] } } }

doc2的得分要高得多,我明白,如果我在doc1中有更多的颜色,那么颜色就越少得分越高.

那么有没有一种方法可以让Elasticsearch为数组字段评分相同,无论有多少项?

kee*_*ety 4

如果您不想在评分期间考虑字段长度 (fieldNorm),您可以禁用映射中字段的规范。

例如,上面示例的映射将是

   {
   "properties": {
      "item_type": {
         "type": "string"
      },
      "color": {
         "type": "string",
         "norms": {
            "enabled": false
         }
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

来自elasticsearch权威指南的这篇文章很好地洞察了字段长度规范。