我的弹性搜索索引中有一个多值字段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;网球"只有(如果有人喜欢足球和网球以外的运动,他不会被包括在查询结果中)如何编写查询?
答案 0 :(得分:0)
编写函数查询将执行此操作。
"script_score": {
"script": {
"file": "countReciprocal",// 1/doc[field].values.size()
"params": {
"field": "favSports"
}
}
}