查询中的三个条件

时间:2018-09-03 09:03:01

标签: elasticsearch

正在运行查询:

{
  "query": {
    "bool":
    { "must_not":{"exists":{"field":"ParentId"}},
      "should":[
        {"query_string":{"default_field":"Name","query":"*es*"}}
      ]
    }
  }
}

我得到包含ParentId=null子字符串的Namees的文档。

我需要通过另一个字段的子字符串添加另一个条件过滤器:

{
  "query": {
    "bool":
    { "must_not":{"exists":{"field":"ParentId"}},
      "should":[
        {"query_string":{"default_field":"Name","query":"*ewr*"}},
        {"wildcard":{"OrganizationPath":{"wildcard":"1_6_32*"}}}
      ]
    }
  }
}

现在Name的筛选器停止工作。

再次尝试,结果相同:

{
  "query": {
    "bool":
    { "must_not":{"exists":{"field":"ParentId"}},
      "should":[
        {"query_string":{"default_field":"Name","query":"*ewr*"}},
        {"query_string":{"default_field":"OrganizationPath", "query": "1_6_32*"}}
      ]
    }
  }
}

为什么以及如何解决?

1 个答案:

答案 0 :(得分:1)

如果您希望所有约束都匹配,则需要将should替换为filter

{
  "query": {
    "bool":
    { "must_not":{"exists":{"field":"ParentId"}},
      "filter":[
        {"query_string":{"default_field":"Name","query":"*ewr*"}},
        {"query_string":{"default_field":"OrganizationPath", "query": "1_6_32*"}}
      ]
    }
  }
}

请注意,如果您需要评分,可以使用must代替filter,否则filter可以满足您的需求。