Filter out metadata fields and only return source fields in elasticsearch

后端 未结 4 899
时光取名叫无心
时光取名叫无心 2020-12-05 04:44

Is there a way to tell elasticsearch to not return any metadata? Currently I can select which fields I want to be returned in source. But I only want fields in source. I wou

相关标签:
4条回答
  • 2020-12-05 05:09

    response_filtering

    All REST APIs accept a filter_path parameter that can be used to reduce the response returned by elasticsearch. This parameter takes a comma separated list of filters expressed with the dot notation:

    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
          }
        ]
      }
    }
    

    In 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
    

    If you want to filter _source fields, you should consider combining the already existing _source parameter (see Get API for more details) with the filter_path parameter like this:

    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"}
        } ]
      }
    }
    
    0 讨论(0)
  • 2020-12-05 05:11

    I do not know options like this in a query. It is possible to do this in a get by Id request.

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

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

    0 讨论(0)
  • 2020-12-05 05:14

    It's not that difficult if we know it :)

    http://localhost:9200/***{index_name}***/***{type}***/_search?pretty&filter_path=took,hits.hits._id,hits.hits._score,**hits.hits._source**
    
    0 讨论(0)
  • 2020-12-05 05:19

    filter_path (response filtering) doesn't have any effect for the version 1.5 of elasticsearch.

    Unless the option had a different name or was moved in the documentation, it was first added in version 1.6.

    0 讨论(0)
自定义标题
段落格式
字体
字号
代码语言
提交回复
热议问题