我想根据嵌套字段的匹配百分比来订购ElasticSearch查询结果。
例如,假设我的ElasticSearch索引如下所示:
{
"properties": {
"name": {
"type": "text"
},
"jobs": {
"type": "nested",
"properties": {
"id": {
"type": "long"
}
}
}
}
}
使用以下文件:
{
"name": "Alice",
"jobs": [
{ "id": 1 },
{ "id": 2 },
{ "id": 3 },
{ "id": 4 }
]
}
{
"name": "Bob",
"jobs": [
{ "id": 1 },
{ "id": 2 },
{ "id": 3 }
]
}
{
"name": "Charles",
"jobs": [
{ "id": 2 },
{ "id": 3 }
]
}
现在,我想执行一个查询来查找具有特定工作的文档,并按匹配工作的百分比排序。 例如:
- 搜索工作
1
和2
,我希望顺序如下:- Bob(匹配66%的工作)
- Alice(匹配50%的工作)
- Charles(匹配50%的工作)
- 搜索工作
2
,我希望顺序如下:- Charles(匹配50%的工作)
- Bob(匹配33%的工作)
- Alice(匹配25%的工作)
到目前为止,我使用了以下查询,但它按匹配次数排序,而不是按百分比排序:
{
"query": {
"nested": {
"path": "jobs",
"query": {
"bool": {
"should": [
{
"match": {
"jobs.id": "1"
}
},
{
"match": {
"jobs.id": "2"
}
}
]
}
},
"score_mode":"sum"
}
}
}