Elasticsearch查询字符串查询不等于?

时间:2016-11-14 22:56:50

标签: elasticsearch

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

name:"Fred"

我想找到名称不等于Fred的所有文件。那个正确的语法是什么?我试过了:

name!="Fred"

虽然它会返回0个文件。

4 个答案:

答案 0 :(得分:44)

你应该使用bool查询和must_not语句

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

答案 1 :(得分:41)

您需要使用NOT operator,如下所示:

!(name:"Fred")

NOT (name:"Fred")

答案 2 :(得分:4)

您还可以结合使用must和must_not。就像名称为Ajit且状态未排队的pull docs。

$ find . -name '*.txt' | xargs rename 's/^/my-/'
$ git add .

答案 3 :(得分:0)

和,或者不是过滤器

and:

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

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

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