Comment puis-je créer une requête curl Elasticsearch pour obtenir la valeur des champs qui ne sont pas nuls et non vides (""),
Voici la requête mysql :
select field1 from mytable where field1!=null and field1!="";
Comment puis-je créer une requête curl Elasticsearch pour obtenir la valeur des champs qui ne sont pas nuls et non vides (""),
Voici la requête mysql :
select field1 from mytable where field1!=null and field1!="";
Une valeur nulle et une chaîne vide ont toutes deux pour conséquence qu'aucune valeur n'est indexée, auquel cas vous pouvez utiliser la fonction exists
filtre
curl -XGET 'http://127.0.0.1:9200/test/test/_search?pretty=1' -d '
{
"query" : {
"constant_score" : {
"filter" : {
"exists" : {
"field" : "myfield"
}
}
}
}
}
'
Ou en combinaison avec (par exemple) une recherche en texte intégral sur le site Web de la Commission européenne. title
champ :
curl -XGET 'http://127.0.0.1:9200/test/test/_search?pretty=1' -d '
{
"query" : {
"filtered" : {
"filter" : {
"exists" : {
"field" : "myfield"
}
},
"query" : {
"match" : {
"title" : "search keywords"
}
}
}
}
}
'
Comme l'a fait remarquer @luqmaan dans les commentaires, la documentation dit que le filtre exists
ne filtre pas les chaînes vides car elles sont considérées comme des valeurs non nulles. .
Pour compléter la réponse de @DrTech, afin de filtrer efficacement les valeurs de type chaîne vide et nulle, vous devez utiliser quelque chose comme ceci :
{
"query" : {
"constant_score" : {
"filter" : {
"bool": {
"must": {"exists": {"field": "<your_field_name_here>"}},
"must_not": {"term": {"<your_field_name_here>": ""}}
}
}
}
}
}
Enveloppez un Filtre manquant dans la section "Must-Not" d'un Filtre Bool . Elle ne renvoie que les documents dans lesquels le champ existe et, si vous attribuez la valeur true à la propriété "null_value", les valeurs qui ne sont pas explicitement nulles.
{
"query":{
"filtered":{
"query":{
"match_all":{}
},
"filter":{
"bool":{
"must":{},
"should":{},
"must_not":{
"missing":{
"field":"field1",
"existence":true,
"null_value":true
}
}
}
}
}
}
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.