我有一组关键字(在我的示例中为技能),我想检索与大多数关键字匹配的文档。文档应按它们匹配的关键字数进行排序。我正在搜索的字段(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
字段。
答案 0 :(得分:0)
如果should
的每个元素都是嵌套查询,则第二个查询有效。
{
"query": {
"bool": {
"should": [
{
"nested": {
"path": "skills",
"query": {
"terms": {
"skills.name": [
"java"
]
}
}
}
},
{
"nested": {
"path": "skills",
"query": {
"terms": {
"skills.name": [
"r"
]
}
}
}
}
]
}
}
}