我有一组关键字(我的示例中的技能),我想检索与其中大多数匹配的文档。文档应按其匹配的关键字数量进行排序。我正在搜索的字段(skills
)是nested
类型。索引具有以下映射:
{
"mappings": {
"profiles": {
"properties": {
"id": {
"type": "keyword"
},
"skills": {
"type": "nested",
"properties": {
"level": {
"type": "float"
},
"name": {
"type": "keyword"
}
}
}
}
}
}
}
我在关键字字段上尝试了两个术语查询,例如:
{
"query": {
"nested": {
"path": "skills",
"query": {
"terms": {
"skills.name": [
"python",
"java"
]
}
}
}
}
}
还有一个布尔查询
{
"query": {
"nested": {
"path": "skills",
"query": {
"bool": {
"should": [
{
"terms": {
"skills.name": [
"java"
]
}
},
{
"terms": {
"skills.name": [
"r"
]
}
}
]
}
}
}
}
}
对于两个查询,返回文档的最高分数为1.因此,两个返回具有任何技能的文档,但不对它们进行排序,使得具有这两种技能的文档位于顶部。问题似乎是skills
是一个nested
领域。
如果should
的每个元素都是嵌套查询,则第二个查询有效。
{
"query": {
"bool": {
"should": [
{
"nested": {
"path": "skills",
"query": {
"terms": {
"skills.name": [
"java"
]
}
}
}
},
{
"nested": {
"path": "skills",
"query": {
"terms": {
"skills.name": [
"r"
]
}
}
}
}
]
}
}
}