我发布一个查询到elasticsearch获取索引的数据..我只需要这些字段数据和有多少文件找到信息......但是有“take”,“shards”和文档里面的“_id”,“ _index”, “_分数”。这些对我来说是不必要的..
这是我的简单要求:
query='{"query": {"match_all": {}}}';
$.ajax({
url: "http://localhost:9200/webproxylog/_search?source=" + query,
type:"GET",
dataType: "json",
data: $.param(params),
success: function(data) {...
我只想点击哪些文件,在文档中我只想“_source”具有字段数据的对象。“take”,“shards”,“_ id”,“_ index”,不需要,我该怎么办?禁用它们
答案 0 :(得分:6)
是的,您可以从_source
中删除多余的字段答案只是一个简单的单词 filter_path
卷曲:
curl -XGET 'http://localhost:9200/webproxylog/_search?filter_path=hits.hits._source'
节点:
如果您使用任何节点“elasticsearch
”,则只需添加一个extrs参数filterPath
client.search({
index: 'index',
type: 'type',
filterPath : ['hits.hits._source'], // this will remove extra fileds _index / _score / _id ...
body: {
sort: [
{"posted_dt": {"order": "desc"}},
"_score"
],
query: query,
size: 50,
from: index * 50
}
}
在您的情况下:
您只需在网址中添加额外字段,例如:
"http://localhost:9200/webproxylog/_search?filter_path=hits.hits._source&source=" + query
答案 1 :(得分:2)
您无法关闭响应元数据。如果您只需要特定字段,则可以返回fields
而不是_source
,但这并不会降低复杂性。该库可以抽象出一些,但我发现直接解析ES响应并不是非常困难。
当然,你必须编写一些JavaScript。幸运的是,它并不太难。这样的事情对我来说通常很有效:
var results = es_response_data['hits']['hits'].map(function(i){
return i['_source'];
});
答案 2 :(得分:1)
只需使用ElasticJS,ElasticSearch推荐的API将帮助JS客户端轻松地与elasticsearch节点进行通信。使用此API可以节省大量时间。