我当前的查询结果为
{
"took": 13,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "ABC",
"_type": "users",
"_id": "1",
"_score": 1,
"fields": {
"partial1": {
"uid": "1",
"pic": "21398129082209.jpg",
"utype": "m",
"user": "John Smith"
}
}
}
]
}
}
每秒不同的1000次查询返回的次数超过100000次。
我想从我的结果中排除其他元数据信息,特别是 _index 和类型,因为我正在使用PHP库检索文档并将其发送到客户端。因此,这会将我的索引和类型暴露给可能存在安全问题的客户端。目前我正在循环结果像
$ttl = count($results['hits']['hits']);
$lst = array();
for($i=0; $i<$ttl; $i++)
{
$lst[] = $results['hits']['hits'][$i]["fields"]["partial1"];
}
如果同时有数千个请求,这就是性能问题。并将结果文档发送给客户端,因为他们输入的内容需要尽可能快。还有出路吗?有一个关于SO的问题但是这个问题大约有一年之久,并表示目前尚未得到支持。或者我只是要做我正在做的事情?
答案 0 :(得分:2)
使用&#34; filter_path&#34;查询参数。它非常灵活。例如,要仅为所有结果包含_source字段(从而排除响应中的所有其他元数据),请使用:?filter_path=hits.hits._source
。自从1.6以来,我一直在其余的api中。
https://www.elastic.co/guide/en/elasticsearch/reference/2.x/common-options.html#_response_filtering