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