1.termQuery
我的理解是 输入的查询内容是什么,就会按照什么去查询,并不会解析查询内容,对它分词
/**
* termQuery 输入的查询内容是什么,就会按照什么去查询,并不会解析查询内容,对它分词
* @param index 索引
* @param type 类型
* @param param 基础查找实体类
* @param c 封装实体class
* @return
* @throws Exception
*/
public List<T> termQuery(String index, String type, BaseSearchParam param,Class c) throws Exception {
SearchRequest searchRequest = new SearchRequest(index);
searchRequest.types(type);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.termQuery(param.getName(),param.getValue()));
sourceBuilder.from(param.getFrom()!=null?param.getFrom():0);
sourceBuilder.size(param.getSize()!=null?param.getSize():10);
sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
searchRequest.source(sourceBuilder);
SearchResponse searchResponse = client.search(searchRequest);
return utils.hits2List(searchResponse.getHits(),c);
}
2.matchQuery
搜索的时候,首先会解析查询字符串,进行分词,然后查询
/**
* matchQuery 搜索的时候,首先会解析查询字符串,进行分词,然后查询
* @param index 索引
* @param type 类型
* @param param 查找实体类
* @param c 封装实体class
* @return
* @throws Exception
*/
public List<T> matchQuery(String index, String type, MatchSearchParam param, Class c) throws Exception {
SearchRequest searchRequest = new SearchRequest(index);
searchRequest.types(type);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
QueryBuilder matchQueryBuilder = QueryBuilders.matchQuery(param.getName(), param.getValue())
.fuzziness(Fuzziness.AUTO)
.prefixLength(param.getPrefixLength()!=null?param.getPrefixLength():3)
.maxExpansions(param.getMaxExpansions()!=null?param.getMaxExpansions():10);
sourceBuilder.query(matchQueryBuilder);
searchRequest.source(sourceBuilder);
SearchResponse searchResponse = client.search(searchRequest);
return utils.hits2List(searchResponse.getHits(),c);
}
以上就是最基础的两个查询,至于加入排序,聚合啊等等操作,都有相应的builder
具体可以见文档:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.3/java-rest-high-query-builders.html
这里不做演示(用到了再查就行)
网友评论