2014-11-03 64 views
1

在某些情況下,我不需要響應json中的所有字段。更改ElasticSearch響應的結構json

例如,

// request json 
{ 
    "_source": "false", 
    "aggs": { ... }, 
    "query": { ... } 
} 

// response json 
{ 
    "took": 123, 
    "timed_out": false, 
    "_shards": { ... }, 
    "hits": { 
    "total": 123, 
    "max_score": 123, 
    "hits": [ 
     { 
     "_index": "foo", 
     "_type": "bar", 
     "_id": "123", 
     "_score": 123 
     } 
    ], 
    ... 
    }, 
    "aggregations": { 
    "foo": { 
     "buckets": [ 
     { 
      "key": 123, 
      "doc_count": 123 
     }, 
     ... 
     ] 
    } 
    } 
} 

其實我並不需要_index/_type每次。當我做聚合時,我不需要hits塊。

"_source" : false"_source": { "exclude": [ "foobar" ] }可以幫助忽略/排除hits塊中的_source字段。

但是,我可以更常見的方式更改ES響應json的結構嗎?謝謝。

回答

1

hits部分,您將始終使用_index,_type_id字段。如果你想在搜索結果中檢索某些特定的領域,你可以在根對象中使用fields參數:

{ 
    "query": { ... }, 
    "aggs": { ... }, 
    "fields":["fieldName1","fieldName2", etc...] 
} 

在做聚合,可以使用search_typedocumentation)參數與count值是這樣的:

GET index/type/_search?search_type=count 

它不會返回任何文檔,但只有結果數,你的聚合將在完全相同的方式來計算。

+0

我找到'「大小」:0'也就像'SEARCH_TYPE = count'。 – jasonz 2014-11-03 09:01:14

+0

如何改變結構? 類似於: 「fields」:[「fieldName1」:{「fieldName2」,etc ...}] 這可能嗎? – Maxrunner 2015-03-06 14:37:21

+0

您將無法直接在ElasticSearch中執行操作:這必須在客戶端完成。 – ThomasC 2015-03-07 11:13:31

1

我最近需要「瘦身」Elasticsearch響應,因爲它在json中大大超過1MB,我開始使用filter_path請求變量。 這允許包含或排除特定字段,並可以具有不同類型的通配符。請閱讀上面鏈接中的文檔,因爲那裏有相當多的信息。

例如。

_search?filter_path=aggregations.**.hits._source,aggregations.**.key,aggregations.**.doc_count 

這減少(在我的情況)響應大小的一半,而不顯著增加搜索時間,所以很值得..