[英]Elasticsearch java query optimization
我有一个包含以下字段A,B,C,D,E的文档。
我可以通过以下两种方式查询以获取A和B的值
方法1:
SearchResponse response1 = client
.prepareSearch("indexname")
.setTypes("all")
.setQuery(QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.termFilter("C", "SOME_VALUE")))
.execute().actionGet();
然后解析源以获取字段A和B。
方法二
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较低。但这不是确定的。 因此,谁能肯定地告诉我,哪种方法更快,为什么呢?
对于每个结果文档,第一种方法必须获取所有字段的值,而第二种方法仅必须获取字段A和B的值。这就是方法2更快的原因。 方法2也更干净,因为您可以直接获取字段A和B的值,并且不需要在客户端应用自定义解析逻辑。
启用_source
字段的原因是什么? 当然,获取_source
字段的值将花费额外的时间,更不用说它也增加了索引中的存储开销。 请参阅此以获取更多信息。 因此,除非绝对必要,否则您可以尝试禁用_source
字段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.