web-dev-qa-db-fra.com

Meilleure façon de vérifier si un champ existe dans un document Elasticsearch

Peut-être est une question très stupide, quel est le meilleur moyen de vérifier si un champ d’un document existe dans elasticsearch? Je ne trouve rien dans la documentation.

Par exemple, si ce document n'a pas le champ/clé "price", je ne souhaite pas renvoyer le résultat.

{ "updated": "2015/09/17 11:27:27", "nom": "Ombre à paupières", "format": "1,5 g/0,05 oz", }

Qu'est-ce que je peux faire?

Merci

Vous pouvez utiliser le filtre exists combiné avec un filtre bool/must comme ceci:

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

DEPRECATED (depuis ES5) Vous pouvez également utiliser le filtre missing combiné à un filtre bool/must_not :

{
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must_not": [
            {
              "missing": {
                "field": "price"
              }
            }
          ]
        }
      }
    }
  }
}
39
Val

Le filtre exists a été remplacé par existsquery à partir d'ES 2.1, mais son fonctionnement est identique. En outre, le filtre manquant est supprimé et la requête manquante est déconseillée.

Pour obtenir tous les documents qui ont un domaine particulier,

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

et pour obtenir tous les documents qui n'ont PAS un champ particulier, utilisez-le avec must_not comme ceci

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

Documents élastiques: https://www.elastic.co/guide/fr/elasticsearch/reference/2.3/query-dsl-missing-query.html

11
Devi

Vous pouvez utiliser le filtre existe:

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

Cordialement, Alain

9
adouang

Vous pouvez faire directement

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

Si vous voulez ajouter un match aussi, alors vous pouvez aller chercher

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

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

6
Surya Purohit
GET /_search
{
    "query": {
        "exists" : { "field" : "price" }
    }
}

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

0
thiagofalcao