Обычно с запросом query_string в elasticsearch я могу сделать:
name:"Fred"
Я хочу найти все документы, где имя не равно Fred. Каков правильный синтаксис для этого? Я пробовал:
name!="Fred"
Хотя он возвращает 0 документов.
Обычно с запросом query_string в elasticsearch я могу сделать:
name:"Fred"
Я хочу найти все документы, где имя не равно Fred. Каков правильный синтаксис для этого? Я пробовал:
name!="Fred"
Хотя он возвращает 0 документов.
Вам нужно использовать оператор NOT, например:
!(name:"Fred")
или
NOT (name:"Fred")
Вы должны использовать bool-запрос с инструкцией must_not
{
"query": {
"bool" : {
"must_not" : {
"term" : {
"name" : "Fred"
}
}
}
}
}
и, а не фильтры
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" }
}
}
}
}
}
Вы также можете использовать комбинацию must и must_not. Как и в документах по запросу, где имя Ajit, а статус не ставится в очередь.
"query": {
"bool": {
"must": [
{
"match": {
"name": "Ajit"
}
}
],
"must_not": [
{enter code here
"match": {
"status": "queued"
}
}
]
}
}
}'''