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

时间:2015-11-24 15:39:41

标签: elasticsearch

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

我已尝试过这两种方法,但两种方法都没有匹配。

query_string搜索根

这会导致仅name

的匹配

注意:如果我没有指定字段,它会搜索所有字段,包括我想要的字段。

{
    "query": {
        "query_string": {
            "query": "searchterm",
            "fields": ["name", "project.projectName"]
        }
    }
}

query_string搜索嵌套对象

这会导致仅project.projectName

的匹配
{
    "query": {
        "nested": {
            "path": "project",
            "query": {
                "query_string": {
                    "query": "searchTerm",
                    "fields": [
                        "name",
                        "project.projectName"
                    ]
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:4)

我认为你可以通过bool query

实现这一目标
{
  "query": {
    "bool": {
      "should": [
        {
          "query_string": {
            "fields": [
              "name"
            ],
            "query": "searchTerm"
          }
        },
        {
          "nested": {
            "path": "project",
            "query": {
              "query_string": {
                "query": "searchTerm",
                "fields": [
                  "project.projectName"
                ]
              }
            }
          }
        }
      ]
    }
  }
}

注意 - 如果您希望searchterm与两者匹配,可以将should替换为must