Habituellement, avec une requête query_string dans elasticsearch, je peux faire:
name:"Fred"
Je veux trouver tous les documents dont le nom n'est pas égal à Fred. Quelle est la syntaxe appropriée pour cela? J'ai essayé:
name!="Fred"
Bien qu'il renvoie 0 documents.
Vous devez utiliser une requête booléenne avec l'instruction must_not
{
"query": {
"bool" : {
"must_not" : {
"term" : {
"name" : "Fred"
}
}
}
}
}
Vous pouvez également utiliser une combinaison de must et must_not. Comme Pull Docs où le nom est Ajit et le statut n'est pas en file d'attente.
"query": {
"bool": {
"must": [
{
"match": {
"name": "Ajit"
}
}
],
"must_not": [
{enter code here
"match": {
"status": "queued"
}
}
]
}
}
}```
et, ou et non filtres
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" }
}
}
}
}
}