查询两个字段,一个嵌套,一个在根上

Sme*_*egs 4 elasticsearch

我正在尝试编写一个在两个不同字段中搜索字符串的查询。一个来自根,一个作为嵌套对象的一部分。

我已经尝试过这两种方法,但都没有在两个领域产生匹配。

query_string关闭根的搜索

name只会导致匹配

注意:如果我不指定字段,它将搜索所有字段,包括我想要的两个字段。

{
    "query": {
        "query_string": {
            "query": "searchterm",
            "fields": ["name", "project.projectName"]
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

query_string断嵌套对象的搜索

project.projectName只会导致匹配

{
    "query": {
        "nested": {
            "path": "project",
            "query": {
                "query_string": {
                    "query": "searchTerm",
                    "fields": [
                        "name",
                        "project.projectName"
                    ]
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Chi*_*h25 6

我认为您可以通过bool 查询来实现这一点

{
  "query": {
    "bool": {
      "should": [
        {
          "query_string": {
            "fields": [
              "name"
            ],
            "query": "searchTerm"
          }
        },
        {
          "nested": {
            "path": "project",
            "query": {
              "query_string": {
                "query": "searchTerm",
                "fields": [
                  "project.projectName"
                ]
              }
            }
          }
        }
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

注意- 如果您希望搜索词在两者上都匹配,则可以替换shouldmust