在某些情况下,我不需要响应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" ] }
可以帮助忽略/排除_source
块中的hits
字段。
但是我能以更常见的方式更改ES响应json的结构吗?感谢。
答案 0 :(得分:2)
我最近需要"减肥" Elasticsearch响应,因为它在json中超过1MB,我开始使用filter_path请求变量。 这允许包含或排除特定字段,并且可以具有不同类型的通配符。请阅读上面链接中的文档,因为那里有相当多的信息。
例如
_search?filter_path=aggregations.**.hits._source,aggregations.**.key,aggregations.**.doc_count
这减少了(在我的情况下)响应大小减半而没有显着增加搜索持续时间,所以值得努力..
答案 1 :(得分:1)
在hits
部分,您将始终点击_index
,_type
和_id
字段。如果您只想检索搜索结果中的某些特定字段,可以在根对象中使用fields
参数:
{
"query": { ... },
"aggs": { ... },
"fields":["fieldName1","fieldName2", etc...]
}
进行聚合时,您可以将search_type
(documentation)参数与count
值一起使用,如下所示:
GET index/type/_search?search_type=count
它不会返回任何文档,只返回结果计数,您的聚合将以完全相同的方式计算。