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