代码之家  ›  专栏  ›  技术社区  ›  ceth

查询中的三个条件

  •  0
  • ceth  · 技术社区  · 6 年前

    以下是工作查询:

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

    ParentId=null Name es 子字符串。

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

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

    现在过滤 姓名

    另一次尝试同样的结果:

    {
      "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 回复  |  直到 6 年前
        1
  •  1
  •   Val    6 年前

    如果希望所有约束都匹配,则需要替换 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 而不是 ,否则 适合你的需要。