二、ES的各种查询
2.1term&terms查询
2.1.1term查询(我试了下province没有办法查询,需到后面加个.keyword)
package com.qf.test;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.qf.utils.ESClient;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.junit.Test;
import java.io.IOException;
import java.util.Map;
public class Demo4 {
ObjectMapper mapper=new ObjectMapper();
RestHighLevelClient client = ESClient.getClient();
String index="sms-logs-index";
String type="sms-logs-type";
@Test
public void termQuery() throws IOException {
//1.创建request对象
SearchRequest searchRequest=new SearchRequest(index);
searchRequest.types(type);
//2.指定查询条件
SearchSourceBuilder builder=new SearchSourceBuilder();
builder.from(0);
builder.size(5);
builder.query(QueryBuilders.termQuery("province.keyword","北京"));
searchRequest.source(builder);
//执行查询
SearchResponse rsp=client.search(searchRequest, RequestOptions.DEFAULT);
//输出结果
for (SearchHit hit:rsp.getHits().getHits()) {
Map<String,Object> result=hit.getSourceAsMap();
System.out.println(result);
}
}
}
2.1.2terms查询
POST /sms-logs-index/sms-logs-type/_search
{
"from": 0,
"size": 5,
"query":{
"terms":{
"province.keyword":[
"江苏",
"北京",
"南通"
]
}
}
}
@Test
public void termsQuerry() throws IOException {
SearchRequest request=new SearchRequest(index);
request.types(type);
SearchSourceBuilder builder=new SearchSourceBuilder();
builder.query(QueryBuilders.termsQuery("province.keyword","南通","江苏"));
request.source(builder);;
SearchResponse rsp=client.search(request, RequestOptions.DEFAULT);
//输出结果
for (SearchHit hit:rsp.getHits().getHits()) {
Map<String,Object> result=hit.getSourceAsMap();
System.out.println(result);
}
}}
2.2match_all&match查询
2.2.1match_all
POST /sms-logs-index/sms-logs-type/_search
{
"query": {
"match_all": {}
}
}
注:ES默认查询10条数据
@Test
public void matchAllQuery() throws IOException {
SearchRequest request=new SearchRequest(index);
request.types(type);
SearchSourceBuilder builder=new SearchSourceBuilder();
builder.query(QueryBuilders.matchAllQuery());
builder.size(20);//ES默认查询10条数据
request.source(builder);
SearchResponse rsp=client.search(request, RequestOptions.DEFAULT);
for (SearchHit hit: rsp.getHits().getHits()) {
System.out.println(hit.getSourceAsMap());
}
}
2.2.2match查询
POST /sms-logs-index/sms-logs-type/_search { "query": { "match": { "smsContent": "恭喜" } } }
@Test
public void matchQuery() throws IOException {
SearchRequest request=new SearchRequest(index);
request.types(type);
SearchSourceBuilder builder=new SearchSourceBuilder();
builder.query(QueryBuilders.matchQuery("smsContent","恭喜"));
builder.size(20);//ES默认查询10条数据
request.source(builder);
SearchResponse rsp=client.search(request, RequestOptions.DEFAULT);
for (SearchHit hit: rsp.getHits().getHits()) {
System.out.println(hit.getSourceAsMap());
}
}
2.2.3布尔match查询
public void booleanMatchQuery() throws IOException {
SearchRequest request=new SearchRequest(index);
request.types(type);
SearchSourceBuilder builder=new SearchSourceBuilder();
builder.query(QueryBuilders.matchQuery("smsContent","恭喜 高级").operator(Operator.AND));
builder.size(20);//ES默认查询10条数据
request.source(builder);
SearchResponse rsp=client.search(request, RequestOptions.DEFAULT);
for (SearchHit hit: rsp.getHits().getHits()) {
System.out.println(hit.getSourceAsMap());
}
}
2.2.4mulitMatch查询
@Test
public void mulitMatchQuery() throws IOException {
SearchRequest request=new SearchRequest(index);
request.types(type);
SearchSourceBuilder builder=new SearchSourceBuilder();
builder.query(QueryBuilders.multiMatchQuery("北京","province","smsContent"));
builder.size(20);//ES默认查询10条数据
request.source(builder);
SearchResponse rsp=client.search(request, RequestOptions.DEFAULT);
for (SearchHit hit: rsp.getHits().getHits()) {
System.out.println(hit.getSourceAsMap());
}
}
2.3id&ids查询
2.3.1id查询
@Test public void findByid() throws IOException { GetRequest request=new GetRequest(index,type,"1"); GetResponse rsp=client.get(request, RequestOptions.DEFAULT); System.out.println(rsp.getSourceAsMap()); }
2.3.2ids查询
@Test public void findByids() throws IOException { SearchRequest request=new SearchRequest(index); request.types(type); SearchSourceBuilder builder=new SearchSourceBuilder(); builder.query(QueryBuilders.idsQuery().addIds("1","2","3")); request.source(builder); SearchResponse rsp=client.search(request, RequestOptions.DEFAULT); for (SearchHit hit: rsp.getHits().getHits()) { System.out.println(hit.getSourceAsMap()); } }
2.4prefix查询
@Test public void findByPrefix() throws IOException { SearchRequest request=new SearchRequest(index); request.types(type); SearchSourceBuilder builder=new SearchSourceBuilder(); builder.query(QueryBuilders.prefixQuery("corpName","恭喜")); request.source(builder); SearchResponse rsp=client.search(request, RequestOptions.DEFAULT); for (SearchHit hit: rsp.getHits().getHits()) { System.out.println(hit.getSourceAsMap()); } }
2.5fuzzy查询
@Test public void findByfuzzy() throws IOException { SearchRequest request=new SearchRequest(index); request.types(type); SearchSourceBuilder builder=new SearchSourceBuilder(); builder.query(QueryBuilders.fuzzyQuery("corpName","恭喜您").prefixLength(2)); request.source(builder); SearchResponse rsp=client.search(request, RequestOptions.DEFAULT); for (SearchHit hit: rsp.getHits().getHits()) { System.out.println(hit.getSourceAsMap()); } }
2.6wildcard查询
@Test public void findByWildcard() throws IOException { SearchRequest request=new SearchRequest(index); request.types(type); SearchSourceBuilder builder=new SearchSourceBuilder(); builder.query(QueryBuilders.wildcardQuery("corpName","恭喜*")); request.source(builder); SearchResponse rsp=client.search(request, RequestOptions.DEFAULT); for (SearchHit hit: rsp.getHits().getHits()) { System.out.println(hit.getSourceAsMap()); } }