弹性搜索阵列得分

时间:2015-05-20 10:07:40

标签: arrays elasticsearch

我的文档有一个类似

的数组

DOC1

{
"item_type":"bag",
"color":["red","blue","green","orange"]
}

DOC2

{
"item_type":"shirt",
"color":["red"]
}

当我进行像

这样的multi_match搜索时

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

doc2得分高得多,据我所知,如果我在doc1中有更多颜色,那么色彩分数越少,得分越高越好。

那么有什么方法可以让Elasticsearch为数组字段评分相同而不管有多少项?

1 个答案:

答案 0 :(得分:4)

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

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

   {
   "properties": {
      "item_type": {
         "type": "string"
      },
      "color": {
         "type": "string",
         "norms": {
            "enabled": false
         }
      }
   }
}

来自elasticsearch权威指南的article可以很好地了解字段长度规范。