1
我有以下字段A,B,C,d的文档时,E.Elasticsearch java的查询优化
我可以查询以获得在以下2种方式A的和B的值
方法1:
SearchResponse response1 = client
.prepareSearch("indexname")
.setTypes("all")
.setQuery(QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.termFilter("C", "SOME_VALUE")))
.execute().actionGet();
然后分析源获得字段A和B.
方法2
String[] fields = {"A", "B"};
SearchResponse response1 = client
.prepareSearch("indexname")
.setTypes("all")
.setQuery(QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.termFilter("C", "SOME_VALUE")))
.addFields(fields)
.execute().actionGet();
现在直接解析字段而不是源。
我比较了两个查询所花费的时间。结果不一致。然而,对于方法2,响应时间倾向于更低。但是它不是确定的。所以任何人都可以肯定地告诉我,哪种方法更快,为什么?
我是ES的新手。所以你的意思是说,在我的索引映射中,我应该做'存储:是'并禁用_source? – 2015-02-08 16:27:56
根据这个 http://stackoverflow.com/questions/15299799/elasticsearch-impact-of-setting-a-not-analyzed-field-as-storeyes 如果我禁用_source,它将被读取一个磁盘每个字段我想要获取。启用_source可以在一次磁盘读取中为我提供所有字段。而我基本需要的是能够根据某个领域的特定价值获得任何领域。很像一个数据库。 – 2015-02-08 16:46:11
“_source”字段的一个磁盘读取逻辑仅适用于文档非常小且需要读取大量字段的情况。在你的情况下,它看起来不像。将'store'标记为'yes'并禁用'_source'应该足够适合您。 – bittusarkar 2015-02-08 17:17:24