如何从阵列中获取最佳分数?

时间:2017-10-18 14:39:21

标签: elasticsearch

我尝试使用带有type = best_fields的multi_match来获取数组中最佳字段的得分,但我得到数组中项目的总和得分。如何创建请求,只获取数组项的最大分数并忽略其他项目分数?

文件:

1: { "field": ["a b c", "b c"] }
2: { "field": ["e f g", "b c"] }

查询:

{
  "query": {
    "multi_match": {
      "query": "c",
      "fields": [
        "field"
      ],
      "type": "best_fields"
    }
  }
}

结果:

1: {"score": 0.39, "highlight": ["a b <em>c</em>", "b <em>c</em>"] }
2: {"score": 0.28, "highlight": ["b <em>c</em>"]}

映射:

 {
  "mappings": {
    "bft": {
      "_all": {
        "enabled": false
      },
      "properties": {
          "field": {
              "type": "text"
          }
      }
    }
  }

1 个答案:

答案 0 :(得分:0)

我不相信你实际上可以做你在这里要求的事情。问题归结为评分算法如何处理字符串数组与单个值的对比。

在看到你的问题之后我做了一些挖掘这个问题,我能够在这个主题上找到的信息似乎意味着[&#34; ab c&#34;,&#34; b c&#34 ;]相当于[&#34; abcb c&#34;]或&#34; abcb c&#34;当谈到得分时。

  

当您从Elasticsearch获取文档时,任何数组都将在   与索引文档时的顺序相同。 _source字段   你得到的包含与你完全相同的JSON文档   索引。

     

但是,数组是可索引的可搜索的 - 作为多值字段,   这是无序的。在搜索时,您不能参考“第一个   元素“或”最后一个元素。“而是将数组视为一个包   值。   Reference

为了实现您想要的目标,我相信您需要将您的各个数组值分解到自己的文档中,并提供另一个可用作过滤器的字段,以便&#34; group&#34;你的文件。