web-dev-qa-db-fra.com

Filtrer les champs de métadonnées et ne renvoyer que les champs sources dans elasticsearch

Existe-t-il un moyen de dire à elasticsearch de ne renvoyer aucune métadonnée? Actuellement, je peux sélectionner les champs que je veux être renvoyés dans la source. Mais je ne veux que des champs dans la source. Je préférerais que les métadonnées ne soient pas renvoyées car je n'en ai pas besoin et éviterais des analyses et des transports inutiles, etc.

J'ai trouvé Elasticsearch - Comment renvoyer uniquement des données, pas des méta-informations? question plus ancienne où quelqu'un a commenté qu'il n'était pas possible de le faire alors. Vous vous demandez si cette fonctionnalité a été ajoutée ou est toujours manquante?

23
bagi

response_filtering

Toutes les API REST acceptent un paramètre filter_path qui peut être utilisé pour réduire la réponse renvoyée par elasticsearch. Ce paramètre prend un liste de filtres séparés par des virgules exprimés avec la notation par points:

curl -XGET 'localhost:9200/_search?pretty&filter_path=took,hits.hits._id,hits.hits._score'
{
  "took" : 3,
  "hits" : {
    "hits" : [
      {
        "_id" : "3640",
        "_score" : 1.0
      },
      {
        "_id" : "3642",
        "_score" : 1.0
      }
    ]
  }
}

En python

def get_all( connection, index_name, type_name ):

    query = {
        "match_all":{}
    }

    result = connection.search( index_name, type_name,
             {"query": query},
             filter_path= ["took", "hits.hits._id", "hits.hits.score"])

    return result

Si vous souhaitez filtrer les champs _source, vous devriez envisager de combiner le déjà existant Paramètre _source (voir Obtenir l'API pour plus de détails) avec le paramètre filter_path comme ceci:

curl -XGET 'localhost:9200/_search?pretty&filter_path=hits.hits._source&_source=title'
{
  "hits" : {
    "hits" : [ {
      "_source":{"title":"Book #2"}
    }, {
      "_source":{"title":"Book #1"}
    }, {
      "_source":{"title":"Book #3"}
    } ]
  }
}
22
The Demz

Ce n'est pas si difficile si on le sait :)

http://localhost:9200/***{index_name}***/***{type}***/_search?pretty&filter_path=took,hits.hits._id,hits.hits._score,**hits.hits._source**
7
Marghoob Suleman

Je ne connais pas de telles options dans une requête. Il est possible de faire cela dans une requête get by id. 

/{index}/{type}/{id}/_source

http://www.elasticsearch.org/guide/fr/elasticsearch/reference/current/docs-get.html#_source

4
Jettro Coenradie

filter_path (filtrage de réponse) n'a aucun effet sur la version 1.5 de elasticsearch. 

À moins que l'option ne porte un nom différent ou soit déplacée dans la documentation, elle a d'abord été ajoutée dans version 1.6

0
Jorge