java 接口操作ElasticSearch进行查询
1.查询所有数据
SearchRequestBuilder srb = client.prepareSearch("user").setTypes("basic_info");
SearchResponse response = srb.setQuery(QueryBuilders.matchAllQuery()).execute().actionGet();
SearchHits hits =response.getHits();
for(SearchHit hit : hits){
System.out.println(hit.getSourceAsString());
}
执行结果:
{"name":"张三222","age":20,"address":"山东威海222","email":"[email protected]"}
{"name":"李四111","age":20,"address":"山东烟台","email":"[email protected]"}
{"name":"张三","age":20,"address":"山东威海","email":"[email protected]"}
{"name":"王五ggg","age":22,"address":"江西南昌","email":"[email protected]"}
{"name":"张三ggg","age":22,"address":"山东青岛","email":"[email protected]"}
{"name":"张三111","age":20,"address":"山东威海11","email":"[email protected]"}
{"name":"张三ggg","age":22,"address":"山东青岛","email":"[email protected]"}
{"name":"王五ggg","age":22,"address":"江西南昌","email":"[email protected]"}
2.分页查询
SearchRequestBuilder srb = client.prepareSearch("user").setTypes("basic_info");
SearchResponse response = srb.setQuery(QueryBuilders.matchAllQuery()).setFrom(0).setSize(3).execute().actionGet();
for(SearchHit hit : hits){
System.out.println(hit.getSourceAsString());
}
执行结果:
{"name":"张三222","age":20,"address":"山东威海222","email":"[email protected]"}
{"name":"李四111","age":20,"address":"山东烟台","email":"[email protected]"}
{"name":"张三","age":20,"address":"山东威海","email":"[email protected]"}
3.排序查询
SearchRequestBuilder srb = client.prepareSearch("user").setTypes("basic_info");
SearchResponse response = srb.setQuery(QueryBuilders.matchAllQuery()).addSort("age", SortOrder.ASC).execute().actionGet();
for(SearchHit hit : hits){
System.out.println(hit.getSourceAsString());
}
执行结果:
{"name":"张三222","age":20,"address":"山东威海222","email":"[email protected]"}
{"name":"李四111","age":20,"address":"山东烟台","email":"[email protected]"}
{"name":"张三","age":20,"address":"山东威海","email":"[email protected]"}
{"name":"张三111","age":20,"address":"山东威海11","email":"[email protected]"}
{"name":"王五ggg","age":22,"address":"江西南昌","email":"[email protected]"}
{"name":"张三ggg","age":22,"address":"山东青岛","email":"[email protected]"}
{"name":"张三ggg","age":22,"address":"山东青岛","email":"[email protected]"}
{"name":"王五ggg","age":22,"address":"江西南昌","email":"[email protected]"}
4.数据列的过滤
SearchRequestBuilder srb = client.prepareSearch("user").setTypes("basic_info");
SearchResponse response = srb.setQuery(QueryBuilders.matchAllQuery()).addSort("age", SortOrder.ASC).setFetchSource(new String[]{"name","age"},null).execute().actionGet();
for(SearchHit hit : hits){
System.out.println(hit.getSourceAsString());
}
执行结果:
{"name":"张三222","age":20}
{"name":"李四111","age":20}
{"name":"张三","age":20}
{"name":"张三111","age":20}
{"name":"王五ggg","age":22}
{"name":"张三ggg","age":22}
{"name":"张三ggg","age":22}
{"name":"王五ggg","age":22}
5.简单条件查询
SearchRequestBuilder srb = client.prepareSearch("user").setTypes("basic_info");
SearchResponse response = srb.setQuery(QueryBuilders.matchQuery("name","张三")).setFetchSource(new String[]{"name","age"},null).execute().actionGet();
for(SearchHit hit : hits){
System.out.println(hit.getSourceAsString());
}
执行结果:
{"name":"张三","age":20}
{"name":"张三ggg","age":22}
{"name":"张三222","age":20}
{"name":"张三ggg","age":22}
{"name":"张三111","age":20}
6.查询结果高亮显示
扫描二维码关注公众号,回复:
154258 查看本文章
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.preTags("<h3><em>");
highlightBuilder.postTags("</em><h3>");
highlightBuilder.field("name");
SearchResponse response = srb.setQuery(QueryBuilders.matchQuery("name","张三")).highlighter(highlightBuilder).addSort("age", SortOrder.ASC).execute().actionGet();
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
System.out.println(hit.getHighlightFields());
}
执行结果:
{"name":"张三222","age":20,"address":"山东威海222","email":"[email protected]"}
{name=[name], fragments[[<h3><em>张</em><h3><h3><em>三</em><h3>222]]}
{"name":"张三","age":20,"address":"山东威海","email":"[email protected]"}
{name=[name], fragments[[<h3><em>张</em><h3><h3><em>三</em><h3>]]}
{"name":"张三111","age":20,"address":"山东威海11","email":"[email protected]"}
{name=[name], fragments[[<h3><em>张</em><h3><h3><em>三</em><h3>111]]}
{"name":"张三ggg","age":22,"address":"山东青岛","email":"[email protected]"}
{name=[name], fragments[[<h3><em>张</em><h3><h3><em>三</em><h3>ggg]]}
{"name":"张三ggg","age":22,"address":"山东青岛","email":"[email protected]"}
{name=[name], fragments[[<h3><em>张</em><h3><h3><em>三</em><h3>ggg]]}
7.组合多条件查询
场景1:must使用
QueryBuilder b1 = QueryBuilders.matchPhraseQuery("name", "张三");
QueryBuilder b2 = QueryBuilders.matchPhraseQuery("address", "山东");
SearchResponse response = srb.setQuery(QueryBuilders.boolQuery().must(b1).must(b2)).execute().actionGet();
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
执行结果:
{"name":"张三","age":20,"address":"山东威海","email":"[email protected]"}
{"name":"张三ggg","age":22,"address":"山东青岛","email":"[email protected]"}
{"name":"张三222","age":20,"address":"山东威海222","email":"[email protected]"}
{"name":"张三ggg","age":22,"address":"山东青岛","email":"[email protected]"}
{"name":"张三111","age":20,"address":"山东威海11","email":"[email protected]"}
场景2: must与must_not组合使用
QueryBuilder b1 = QueryBuilders.matchPhraseQuery("name", "张三");
QueryBuilder b2 = QueryBuilders.matchPhraseQuery("address", "青岛");
SearchResponse response = srb.setQuery(QueryBuilders.boolQuery().must(b1).mustNot(b2)).execute().actionGet();
SearchHits hits = response.getHits();
执行结果:
{"name":"张三","age":20,"address":"山东威海","email":"[email protected]"}
{"name":"张三222","age":20,"address":"山东威海222","email":"[email protected]"}
{"name":"张三111","age":20,"address":"山东威海11","email":"[email protected]"}
场景3: should使用
QueryBuilder b1 = QueryBuilders.matchPhraseQuery("name", "张三");
QueryBuilder b2 = QueryBuilders.matchPhraseQuery("address", "山东");
QueryBuilder b3 = QueryBuilders.rangeQuery("age").gte(20);
SearchResponse response = srb.setQuery(QueryBuilders.boolQuery().must(b1).must(b2).should(b3)).addSort("age",SortOrder.DESC).execute().actionGet();
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
执行结果:
{"name":"张三ggg","age":22,"address":"山东青岛","email":"[email protected]"}
{"name":"张三ggg","age":22,"address":"山东青岛","email":"[email protected]"}
{"name":"张三222","age":20,"address":"山东威海222","email":"[email protected]"}
{"name":"张三","age":20,"address":"山东威海","email":"[email protected]"}
{"name":"张三111","age":20,"address":"山东威海11","email":"[email protected]"}
场景4:filter使用
QueryBuilder b1 = QueryBuilders.matchPhraseQuery("name", "张三");
QueryBuilder b2 = QueryBuilders.matchPhraseQuery("address", "山东");
QueryBuilder b3 = QueryBuilders.rangeQuery("age").gt(20);
SearchResponse response = srb.setQuery(QueryBuilders.boolQuery().must(b1).must(b2).should(b3).filter(b3)).execute().actionGet();
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
执行结果:
{"name":"张三ggg","age":22,"address":"山东青岛","email":"[email protected]"}
{"name":"张三ggg","age":22,"address":"山东青岛","email":"[email protected]"}