elasticsearch的查詢是通過執行json格式的查詢條件,在java api中就是構造QueryBuilder對象,elasticsearch完全支援queryDSL風格的查詢方式,QueryBuilder的構建類是QueryBuilders,filter的構建類是FilterBuilders。下面是構造QueryBuilder的例子:
import static org.elasticsearch.index.query.FilterBuilders.*; import static org.elasticsearch.index.query.QueryBuilders.*; QueryBuilder qb1 = termQuery("name", "kimchy"); QueryBuilder qb2 = boolQuery() .must(termQuery("content", "test1")) .must(termQuery("content", "test4")) .mustNot(termQuery("content", "test2")) .should(termQuery("content", "test3")); QueryBuilder qb3 = filteredQuery( termQuery("name.first", "shay"), rangeFilter("age") .from(23) .to(54) .includeLower(true) .includeUpper(false) );
其中qb1構造了一個TermQuery,對name這個欄位進行項搜尋,項是最小的索引片段,這個查詢對應lucene本身的TermQuery。 qb2構造了一個組合查詢(BoolQuery),其對應lucene本身的BooleanQuery,可以通過must、should、mustNot方法對QueryBuilder進行組合,形成多條件查詢。 qb3構造了一個過濾查詢,就是在TermQuery的基礎上添加一個過濾條件RangeFilter,這個範圍過濾器將限制查詢age欄位大於等於23,小於等於54的結果。除了這三個,elasticsearch還支援很多種類的查詢方式,遲點寫個介紹。
構造好了Query就要傳到elasticsearch裡面進行查詢,下面是例子:
SearchResponse response = client.prepareSearch("test") .setQuery(query) .setFrom(0).setSize(60).setExplain(true) .execute() .actionGet();
這句的意思是,查詢test索引,查詢條件為query,從第0條記錄開始,最多返回60條記錄。返回結果為SearchResponse,下面解析SearchResponse:
SearchHits hits = searchResponse.hits();for (int i = 0; i < 60; i++) {System.out.println(hits.getAt(i).getSource().get("field"));}
獲得SearchResponse中的SearchHits,然後hits.getAt(i).getSource().get("field")獲得field欄位的值。
本文地址:http://blog.csdn.net/laigood12345/article/details/7606011