Elasticsearch如何使用"更短的查询多值字段更好"进球?

时间:2016-09-02 03:04:55

标签: elasticsearch lucene

我的弹性搜索索引中有一个多值字段favSports(未分析):

{"name":"Mike","favSports":["soccer","tennis"],...}
{"name":"Joe","favSports":["soccer","tennis","basketball"],...}

我想写一个查询,找到喜欢足球和网球的人,这是我的疑问:

"query": {
  "bool": {
    "must": [
      {   "term": {              "favSports": "soccer"            }       },
      {   "term": {              "favSports": "tennis"            }       }
    ],
    "must": { 
      "query_string": {
        .....(Other query criteria)
      }
    }
  }
} 

在上面的查询中,迈克和乔的得分"favSports":"soccer/tennis"相同。

我想写一个Mike得分高于Joe的查询,因为Mike完全匹配soccer/tennis而Joe有额外basketball,我该如何编写此类查询?

另一个问题:如果我想要"足球"和#34;网球"只有(如果有人喜欢足球和网球以外的运动,他不会被包括在查询结果中)如何编写查询?

1 个答案:

答案 0 :(得分:0)

编写函数查询将执行此操作。

"script_score": {
      "script": {
        "file": "countReciprocal",// 1/doc[field].values.size()
        "params": {
          "field": "favSports"
        }
      }
    }