import org.elasticsearch.action.search.*;
import org.elasticsearch.client.Client;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import java.util.List;
/**
* Created by root on 17-2-23.
*/
public class SearchDocument {
/**
* ????
* @param client
*/
public static void search(Client client,String index,String type) {
SearchResponse response = client.prepareSearch(index)
.setTypes(type)
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setQuery(QueryBuilders.termQuery("name", "zhengzhi")) // Query
.setPostFilter(QueryBuilders.rangeQuery("age").from(12).to(50)) // Filter
.setFrom(0).setSize(60).setExplain(true)
.get();
SearchHit[] search2Hits = response.getHits().getHits();
for (SearchHit searchHit : search2Hits) {
String source = searchHit.getSource().toString();
System.out.println("--------- searchByScroll source {}"+source);
}
// for
client.close();
}
/**
* ??scroll????
*/
public static String searchByScroll(Client client,String index,String type) {
SearchRequestBuilder searchRequestBuilder = client.prepareSearch();
searchRequestBuilder.setIndices(index);
searchRequestBuilder.setTypes(type);
searchRequestBuilder.setScroll(new TimeValue(30000));
SearchResponse searchResponse = searchRequestBuilder.get();
String scrollId = searchResponse.getScrollId();
SearchHit[] searchHits = searchResponse.getHits().getHits();
for (SearchHit searchHit : searchHits) {
String source = searchHit.getSource().toString();
System.out.println("--------- searchByScroll source {}"+source);
} // for
client.close();
return scrollId;
}
/**
* ????ID????
* @param client
* @param scrollId
*/
public static void searchByScrollId(Client client, String scrollId){
TimeValue timeValue = new TimeValue(30000);
SearchScrollRequestBuilder searchScrollRequestBuilder;
SearchResponse response;
// ??
while (true) {
System.out.println("--------- searchByScroll scrollID {}"+scrollId);
searchScrollRequestBuilder = client.prepareSearchScroll(scrollId);
searchScrollRequestBuilder.setScroll(timeValue);
// ??
response = searchScrollRequestBuilder.get();
// ??????????? ??????????? ?hits????
if (response.getHits().getHits().length == 0) {
break;
}
SearchHit[] searchHits = response.getHits().getHits();
for (SearchHit searchHit : searchHits) {
String source = searchHit.getSource().toString();
System.out.println("--------- searchByScroll source {}"+source);
} // for
scrollId = response.getScrollId();
client.close();
}
}
/**
* ????ID
* @param client
* @param scrollIdList
* @return
*/
public static boolean clearScroll(Client client, List<String> scrollIdList){
ClearScrollRequestBuilder clearScrollRequestBuilder = client.prepareClearScroll();
clearScrollRequestBuilder.setScrollIds(scrollIdList);
ClearScrollResponse response = clearScrollRequestBuilder.get();
return response.isSucceeded();
}
/**
* ????ID
* @param client
* @param scrollId
* @return
*/
public static boolean clearScroll(Client client, String scrollId){
ClearScrollRequestBuilder clearScrollRequestBuilder = client.prepareClearScroll();
clearScrollRequestBuilder.addScrollId(scrollId);
ClearScrollResponse response = clearScrollRequestBuilder.get();
return response.isSucceeded();
}
public static void multiSearch(Client client){
SearchRequestBuilder srb1 = client
.prepareSearch().setQuery(QueryBuilders.queryStringQuery("football")).setSize(1);
SearchRequestBuilder srb2 = client
.prepareSearch().setQuery(QueryBuilders.matchQuery("name", "Aires")).setSize(1);
MultiSearchResponse sr = client.prepareMultiSearch()
.add(srb1)
.add(srb2)
.get();
// You will get all individual responses from MultiSearchResponse#getResponses()
long nbHits = 0;
for (MultiSearchResponse.Item item : sr.getResponses()) {
SearchResponse response = item.getResponse();
System.out.println(response.toString());
nbHits += response.getHits().getTotalHits();
}
client.close();
}
public static void searchUseAggregations(Client client){
SearchResponse sr = client.prepareSearch()
.setQuery(QueryBuilders.matchAllQuery())
.addAggregation(
AggregationBuilders.terms("agg1").field("name")
)
.addAggregation(
AggregationBuilders.dateHistogram("agg2")
.field("position")
.dateHistogramInterval(DateHistogramInterval.YEAR)
)
.get();
// Get your facet results
Terms agg1 = sr.getAggregations().get("agg1");
// DateHistogram agg2 = sr.getAggregations().get("agg2");
}
}
Elasticsearch JAVA API 之 Search API
最新推荐文章于 2024-07-30 07:27:30 发布