繁体   English   中英

Elasticsearch Java查询优化

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM