【问题标题】:Elasticsearch query string query with not equal to?Elasticsearch查询字符串查询不等于?
【发布时间】:2017-03-28 17:04:04
【问题描述】:

通常在 elasticsearch 中使用 query_string 查询,我可以这样做:

name:"Fred"

我想查找 name 不等于 Fred 的所有文档。什么是正确的语法?我试过了:

name!="Fred"

虽然它返回 0 个文档。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    你需要使用NOT operator,像这样:

    !(name:"Fred")
    

    NOT (name:"Fred")
    

    【讨论】:

    【解决方案2】:

    你应该使用带有 must_not 语句的 bool 查询

    {
      "query": {
        "bool" : {
          "must_not" : {
            "term" : {
              "name" : "Fred"
            }
          }
        }
      }
    }
    

    【讨论】:

    • 为什么?哪个是更好的选择,使用查询字符串查询还是您的选择?
    • @RodriKing 没有更好的选择,这取决于您要做什么。在当前的问题中,问题是如何提交特定术语,这就是为什么我会使用术语,另一方面 query_string 会将您的搜索文本拆分为多个术语。所以基本上这取决于你想要达到的目标。
    • 好的,谢谢,还有一个小问题。我想进行通配符查询,但通配符查询不适用于分析/过滤器(匹配查询适用)。我想应用忽略单词重音的分析。与我不能使用的通配符查询一样,我正在使用查询字符串查询。对吗?
    • @RodriKing 用示例创建单独的问题。
    【解决方案3】:

    and,or and not 过滤器


    ***For "and" query:***
    
        "filtered" : {
            "query" : {
                "term" : { "name.first" : "shay" }
            },
            "filter" : {
                "and" : {
                    "filters" : [
                        {
                            "term" : { "name.first" : "something" }
                        },
                        {
                            "term" : { "name.first" : "other" }
                        }
                    ]
                }
            }
        }
    

    ***For "or" query:***
    
    {
        "filtered" : {
            "query" : {
                "term" : { "name.first" : "shay" }
            },
            "filter" : {
                "or" : {
                    "filters" : [
                        {
                            "term" : { "name.first" : "something" }
                        },
                        {
                            "term" : { "name.first" : "other" }
                        }
                    ]
                }
            }
        }
    }
    

    ***For "not" query:***
    
    {
        "filtered" : {
            "query" : {
                "term" : { "name.first" : "shay" }
            },
            "filter" : {
                "not" : {
                    "filter" :  {
                        "term" : { "name.first" : "someting" }
                    }
                }
            }
        }
    }
    

    【讨论】:

      【解决方案4】:

      您还可以使用 must 和 must_not 的组合。就像名称为 Ajit 且状态未排队的拉取文档一样。

      {
          "query": {
              "bool": {
                  "must": [
                      {
                          "match": {
                              "name": "Ajit"
                          }
                      }
                  ],
                  "must_not": [
                      {
                          "match": {
                              "status": "queued"
                          }
                      }
                  ]
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-09
        • 2014-12-09
        • 2012-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-24
        • 2021-05-24
        相关资源
        最近更新 更多