tutorial aws elasticsearch

aws - elasticsearch tutorial



Crear una consulta de curl Elasticsearch para no nulo y no vacĂ­o("") (7)

¿Cómo puedo crear una consulta de curl de Elasticsearch para obtener el valor de campo que no es nulo ni está vacío (""),

Aquí está la consulta mysql:

select field1 from mytable where field1!=null and field1!="";


Ajustar un filtro faltante en la sección No se debe de un filtro Bool . Solo devolverá los documentos donde exista el campo, y si establece la propiedad "null_value" en verdadero, los valores que son explícitamente no nulos.

{ "query":{ "filtered":{ "query":{ "match_all":{} }, "filter":{ "bool":{ "must":{}, "should":{}, "must_not":{ "missing":{ "field":"field1", "existence":true, "null_value":true } } } } } } }


Como @luqmaan señaló en los comentarios, la documentation dice que el filtro exists no filtra las cadenas vacías, ya que se consideran valores no nulos .

Así que al agregar la respuesta de @ DrTech, para filtrar de manera efectiva los valores de cadena vacíos y nulos, debe usar algo como esto:

{ "query" : { "constant_score" : { "filter" : { "bool": { "must": {"exists": {"field": "<your_field_name_here>"}}, "must_not": {"term": {"<your_field_name_here>": ""}} } } } } }


En elasticsearch 5.6, tengo que usar el siguiente comando para filtrar la cadena vacía:

GET /_search { "query" : { "regexp":{ "<your_field_name_here>": ".+" } } }


Estamos utilizando Elasticsearch versión 1.6 y utilicé esta consulta de un compañero de trabajo para cubrir no nulo y no vacío para un campo:

{ "query": { "filtered": { "query": { "match_all": {} }, "filter": { "bool": { "must": [ { "exists": { "field": "myfieldName" } }, { "not": { "filter": { "term": { "myfieldName": "" } } } } ] } } } } }


Puede usar el filtro no en la parte superior de la falta .

"query": { "filtered": { "query": { "match_all": {} }, "filter": { "not": { "filter": { "missing": { "field": "searchField" } } } } } }


Puedes hacer eso con la consulta bool y la combinación de must y must_not así:

GET index/_search { "query": { "bool": { "must": [ {"exists": {"field": "field1"}} ], "must_not": [ {"term": {"field1": ""}} ] } } }

Probé esto con Elasticsearch 5.6.5 en Kibana.


Un valor nulo y una cadena vacía dan como resultado que no se indexe ningún valor, en cuyo caso puede usar el filtro exists

curl -XGET ''http://127.0.0.1:9200/test/test/_search?pretty=1'' -d '' { "query" : { "constant_score" : { "filter" : { "exists" : { "field" : "myfield" } } } } } ''

O en combinación con (por ejemplo) una búsqueda de texto completo en el campo de title :

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