弹性搜索查询字符串查询不等于?

通常在 elasticsearch 中使用 query _ string 查询时,我可以:

name:"Fred"

我要找到所有名字不等于弗雷德的文档。这个问题的正确语法是什么?我试过:

name!="Fred"

虽然它返回0个文档。

163522 次浏览

你需要使用 非操作员,像这样:

!(name:"Fred")

或者

NOT (name:"Fred")

您应该使用 bool query 和 must _ not 语句

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

或者不是过滤器


***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" }
}
}
}
}
}

也可以使用 must 和 must _ not 的组合。类似于名称为 Ajit 且状态不排队的 pull 文档。

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