版权声明:本文为博主原创文章,未经博主允许不得转载。交流请联系:351605040 https://blog.csdn.net/Arvinzr/article/details/85213476
关于Elasticsearch MultiSearch 查询,一个请求可同时支持多个查询
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.lucene.queryparser.flexible.core.builders.QueryBuilder;
import org.elasticsearch.action.search.MultiSearchRequestBuilder;
import org.elasticsearch.action.search.MultiSearchResponse;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.QueryBuilders;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.List;
/**
* @Author :PENG.ZHANG
* @Description :
* @Date : Create in 15:22 2018/6/4
* Created by Administrator on 2018/6/4.
*/
public class MultiSearch {
private static final Logger logger = LogManager.getLogger(MultiSearch.class);
public static void main(String[] args) {
try {
Settings settings = Settings.settingsBuilder()
.put("cluster.name", "elasticsearch").build();
// 创建客户端
Client client = TransportClient.builder().settings(settings).build()
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.0.81"), 9300));
// 初始化两个查询
SearchRequestBuilder srb1 =client
.prepareSearch().setQuery(QueryBuilders.boolQuery()
.must(QueryBuilders.boolQuery().should(QueryBuilders.termQuery("idNumb","2028"))))
.setExplain(true);
SearchRequestBuilder srb2 = client
.prepareSearch().setQuery(QueryBuilders.boolQuery()
.must(QueryBuilders.boolQuery().should(QueryBuilders.termQuery("idNumb","2035"))))
.setExplain(true);
//将query对象放入集合中模仿传参
List<SearchRequestBuilder> arrList = new ArrayList<>();
arrList.add(srb1);
arrList.add(srb2);
//MultiSearch查询
MultiSearchRequestBuilder sr = null;
for (SearchRequestBuilder ss : arrList){
sr = client.prepareMultiSearch().add(ss);
}
MultiSearchResponse ss = sr.execute().actionGet();
long nbHits = 0;
for (MultiSearchResponse.Item item : ss.getResponses()) {
SearchResponse response = item.getResponse();
nbHits += response.getHits().getTotalHits();
System.out.println("print result :"+nbHits);
}
} catch (Exception e) {
logger.error("exception:", e);
}
}
}