Melhor maneira de verificar se existe um campo num documento de pesquisa elástica

pode ser uma pergunta muito estúpida, Qual é a melhor maneira de verificar se um campo de um documento em elasticsearch existe? Não encontro nada na documentação.

por exemplo, se este documento não tem o campo/chave "Preço" Eu não quero retornar no resultado.

{ "actualizado": "2015/09/17 11:27:27", "nome": "sombra dos olhos", "formato": "1,5 g / 0,05 oz", }

O que posso fazer?

Obrigado.
Author: Ekaitz Hernandez Troyas, 2015-10-05

5 answers

Podes usar o exists filtro combinado com um bool/must Filtro Assim:

{
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must": [
            {
              "exists": {
                "field": "price"
              }
            },
            ...     <-- your other constraints, if any
          ]
        }
      }
    }
  }
}

Você também pode usar o missing filtro combinado com um bool/must_not filtro:

{
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must_not": [
            {
              "missing": {
                "field": "price"
              }
            }
          ]
        }
      }
    }
  }
}
 33
Author: Val, 2015-10-05 13:26:04

O filtro exists foi substituído por exists consulta da ES 2.1, embora o seu funcionamento seja o mesmo. Além disso, o filtro em falta é removido e a consulta em falta é desactualizada.

Para obter todos os documentos que têm um campo em particular,

"bool": {
    "must": {
        "exists": {
            "field": "my_field"
        }
    }
}

E para obter todos os documentos que não tenham um campo em particular, use-o com must_not assim

"bool": {
    "must_not": {
        "exists": {
            "field": "my_field"
        }
    }
}

Documentos elásticos: https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-missing-query.html

 11
Author: Devi, 2016-08-26 21:48:29

Pode usar o filtro existe:

{
  "query": {
    "filtered": {
      "filter": {
        "exists": {
          "field": "status"
        }
      },
      "query": {
        "match_all": {}
      }
    }
  }
}

Relativamente a:, Alain

 9
Author: adouang, 2015-10-05 13:15:00

Podes fazer directamente

{
    "query": {
        "exists": {
            "field": "fieldName"
        }
    }
}

Se também quiseres adicionar um fósforo, podes ir para

{
    "query": {
        "bool": {
            "must": [{
                "match": {
                    "fieldName": "value"
                }
            },
            {
                "exists": {
                    "field": "fieldName"
                }
            }]
        }
    }
}

Https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-exists-query.html

 6
Author: Surya Purohit, 2017-06-21 11:50:32
GET /_search
{
    "query": {
        "exists" : { "field" : "price" }
    }
}

Fonte: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-exists-query.html

 0
Author: thiagofalcao, 2018-08-10 23:06:34