在弹性搜索6.3中对嵌套字段进行关键字术语查询

问题描述 投票:0回答:1

我有一组关键字(我的示例中的技能),我想检索与其中大多数匹配的文档。文档应按其匹配的关键字数量进行排序。我正在搜索的字段(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领域。

elasticsearch term scoring
1个回答
0
投票

如果should的每个元素都是嵌套查询,则第二个查询有效。

{
  "query": {
    "bool": {
      "should": [
        {
          "nested": {
            "path": "skills",
            "query": {
              "terms": {
                "skills.name": [
                  "java"
                ]
              }
            }
          }
        },
        {
          "nested": {
            "path": "skills",
            "query": {
              "terms": {
                "skills.name": [
                  "r"
                ]
              }
            }
          }
        }
      ]
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.