更改ElasticSearch响应的结构json
问题描述:
在某些情况下,我不需要响应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的结构吗?谢谢。
答
在hits
部分,您将始终使用_index
,_type
和_id
字段。如果你想在搜索结果中检索某些特定的领域,你可以在根对象中使用fields
参数:
{
"query": { ... },
"aggs": { ... },
"fields":["fieldName1","fieldName2", etc...]
}
在做聚合,可以使用search_type
(documentation)参数与count
值是这样的:
GET index/type/_search?search_type=count
它不会返回任何文档,但只有结果数,你的聚合将在完全相同的方式来计算。
答
我最近需要“瘦身”Elasticsearch响应,因为它在json中大大超过1MB,我开始使用filter_path请求变量。 这允许包含或排除特定字段,并可以具有不同类型的通配符。请阅读上面链接中的文档,因为那里有相当多的信息。
例如。
_search?filter_path=aggregations.**.hits._source,aggregations.**.key,aggregations.**.doc_count
这减少(在我的情况)响应大小的一半,而不显著增加搜索时间,所以很值得..
我找到'“大小”:0'也就像'SEARCH_TYPE = count'。 – jasonz 2014-11-03 09:01:14
如何改变结构? 类似于: “fields”:[“fieldName1”:{“fieldName2”,etc ...}] 这可能吗? – Maxrunner 2015-03-06 14:37:21
您将无法直接在ElasticSearch中执行操作:这必须在客户端完成。 – ThomasC 2015-03-07 11:13:31