只获取ElasticSearch中的结果文档,不包括使用PHP库的其他元数据

时间:2014-01-22 14:23:51

标签: json elasticsearch

我当前的查询结果为

{
"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的问题但是这个问题大约有一年之久,并表示目前尚未得到支持。或者我只是要做我正在做的事情?

1 个答案:

答案 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