我的弹性类型包含具有此结构的文档
{
"name": "Foo Bar",
"myTags": [
{
"id": 3,
"name": "My tag 1"
},
{
"id": 5,
"name": "My Tag 5"
},
{
"id": 7,
"name": "My Tag 7"
}
]
}
现在,给定3个标签我希望按匹配标签的数量排序所有文档。首先是匹配所有3个标签的文件,而不是那些匹配2然后是1个标签的文件。
我该怎么做?
答案 0 :(得分:0)
您可以使用function_score
:
{
"query": {
"function_score": {
"query": {
"match_all": {}
},
"functions": [
{
"filter": {
"nested": {
"path": "myTags",
"query": {
"term": {
"myTags.name": "My Tag 1"
}
}
}
},
"weight": 1
},
{
"filter": {
"nested": {
"path": "myTags",
"query": {
"term": {
"myTags.name": "My Tag 5"
}
}
}
},
"weight": 1
},
{
"filter": {
"nested": {
"path": "myTags",
"query": {
"term": {
"myTags.name": "My Tag 7"
}
}
}
},
"weight": 1
}
],
"boost_mode": "sum",
"score_mode": "sum"
}
}
}