一、Search
1.通过搜索API可以从返回值里取得查询到的结果,可以一次查询多个索引,多个类型。ES提供了Query API和Filter API,直接看一个实例.
import
org.elasticsearch.action.search.SearchResponse;
import
org.elasticsearch.action.search.SearchType;
import
org.elasticsearch.index.query.FilterBuilders.*;
import
org.elasticsearch.index.query.QueryBuilders.*;
//参数设置都是可选的
SearchResponse response = client.prepareSearch(
"index1"
,
"index2"
)
.setTypes(
"type1"
,
"type2"
)
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setQuery(QueryBuilders.termQuery(
"multi"
,
"test"
))
// Query
.setPostFilter(FilterBuilders.rangeFilter(
"age"
).from(
12
).to(
18
))
// Filter
.setFrom(
0
).setSize(
60
).setExplain(
true
)
.execute()
.actionGet();
//看一个最短的查询,当然他有很多默认设置,比如from=0,size=10
SearchResponse response = client.prepareSearch().execute().actionGet();
|
2. Using scrolls in java(Scroll有点像数据库的游标)
import
static
org.elasticsearch.index.query.FilterBuilders.*;
import
static
org.elasticsearch.index.query.QueryBuilders.*;
QueryBuilder qb = termQuery(
"multi"
,
"test"
);
SearchResponse scrollResp = client.prepareSearch(test)
.setSearchType(SearchType.SCAN)
.setScroll(
new
TimeValue(
60000
))
.setQuery(qb)
.setSize(
100
).execute().actionGet();
//100 hits per shard will be returned for each scroll
//Scroll until no hits are returned
while
(
true
) {
for
(SearchHit hit : scrollResp.getHits().getHits()) {
//Handle the hit...
}
scrollResp = client.prepareSearchScroll(scrollResp.getScrollId()).setScroll(
new
TimeValue(
600000
)).execute().actionGet();
//Break condition: No hits are returned
if
(scrollResp.getHits().getHits().length ==
0
) {
break
;
}
}
|
3.MultiSearch
SearchRequestBuilder srb1 = node.client()
.prepareSearch().setQuery(QueryBuilders.queryString(
"elasticsearch"
)).setSize(
1
);
SearchRequestBuilder srb2 = node.client()
.prepareSearch().setQuery(QueryBuilders.matchQuery(
"name"
,
"kimchy"
)).setSize(
1
);
MultiSearchResponse sr = node.client().prepareMultiSearch()
.add(srb1)
.add(srb2)
.execute().actionGet();
// You will get all individual responses from MultiSearchResponse#getResponses()
long
nbHits =
0
;
for
(MultiSearchResponse.Item item : sr.getResponses()) {
SearchResponse response = item.getResponse();
nbHits += response.getHits().getTotalHits();
}
|
4.Using Aggregation