DCL语句java实现
基本查询
@Test
void testMatchAll() throws IOException {
SearchRequest request = new SearchRequest("hotel");
request.source().query(QueryBuilders.matchAllQuery());
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
long total = hits.getTotalHits().value;
System.out.println("条数为-->"+total);
SearchHit[] hits1 = hits.getHits();
for (SearchHit documentFields : hits1) {
String sourceAsString = documentFields.getSourceAsString();
HotelDoc hotelDoc = JSON.parseObject(sourceAsString, HotelDoc.class);
System.out.println(hotelDoc);
}
}
@Test
void testMatch() throws IOException {
SearchRequest request = new SearchRequest("hotel");
request.source().query(QueryBuilders.multiMatchQuery("如家","brand","name"));
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
responseHandle(response);
}
void testBool() throws IOException {
SearchRequest request = new SearchRequest("hotel");
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(QueryBuilders.termQuery("name","如家"));
boolQueryBuilder.filter(QueryBuilders.rangeQuery("price").gte(250));
request.source().query(boolQueryBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
responseHandle(response);
}
- 这里的各种类型查询只需要记住 reques.sourec.query(QueryBuilders.)下面的内容即可,需要什么就点什么,哪里亮了点哪里
结果处理
@Test
void testSort() throws IOException {
int page = 2;
int size = 5;
SearchRequest request = new SearchRequest("hotel");
request.source().query(QueryBuilders.matchAllQuery());
request.source().sort("price", SortOrder.ASC);
request.source().from((page-1) * size).size(size);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
responseHandle(response);
}
- 结果集都是只跟source下面的方法有关,查询的则是query()的方法有关
高亮处理
@Test
void testHlihgt() throws IOException {
SearchRequest request = new SearchRequest("hotel");
request.source().query(QueryBuilders.matchQuery("all","如家"));
request.source().highlighter(new HighlightBuilder().field("name").requireFieldMatch(false));
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
responseHandle(response);
}
private void responseHandle(SearchResponse response) {
SearchHits hits = response.getHits();
long total = hits.getTotalHits().value;
System.out.println("条数为-->"+total);
SearchHit[] hits1 = hits.getHits();
for (SearchHit documentFields : hits1) {
String sourceAsString = documentFields.getSourceAsString();
HotelDoc hotelDoc = JSON.parseObject(sourceAsString, HotelDoc.class);
Map<String, HighlightField> highlightFields = documentFields.getHighlightFields();
if(!CollectionUtils.isEmpty(highlightFields)){
HighlightField name = highlightFields.get("name");
if (name != null) {
String string = name.getFragments()[0].string();
hotelDoc.setName(string);
}
}
System.out.println(hotelDoc);
}
}