es 多条件查询 or或 查询
es 查询满足条件1 或满足条件2 的结果合集
//主查询
matchQuery.must(
QueryBuilders.boolQuery()
.should(QueryBuilders.matchQuery("xm","好的"))//分词后匹配
.should(QueryBuilders.matchParaseQuery("addr","钱江路"))//匹配完整词
.should(QueryBuilders.termQuery("status",0))//完全匹配
.should(QueryBuilders.termsQuery("keyword",string[]))//多关键字匹配
);
SearchResponse response = client.prepareSearch("indexName")
.setFrom(0)
.setSize(10)
.setQuery(matchQuery)
.get();
SearchHits hits = response.getHits();
int count = (int) hits.getTotalHits();
for(SearchHit one:hits)
{
//遍历结果处理
}
es查询
@Resource
@Qualifier("restHighLevelClient")
private RestHighLevelClient client;
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.设置条件;
//boolQueryBuilder.should(QueryBuilders.matchQuery("retentionPeriod", "9002"));
searchSourceBuilder.query(boolQueryBuilder);
SearchRequest request = new SearchRequest(index);
request.source(builder);
// 发起搜索请求
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
请求构造器
IndexRequest;
SearchRequest;
UpdateRequest;
DeleteRequest;
根据集合查询
List<String> idList = Arrays.asList(entityBorrow.getFileId().split(","));
boolQueryBuilder.must(QueryBuilders.termsQuery("id", idList));
es在postman中的操作
1.查看所有索引 http://127.0.0.1:9200/_cat/indices?v
bool查询使用 BoolQueryBuilder (must )
范围查询 RangeQueryBuilder
一个完整的查询案例
@Resource
private RestHighLevelClient client;
@GetMapping(value = "test")
public ApiResult test(){
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.should(QueryBuilders.matchQuery("retentionPeriod", "9002"));
SearchSourceBuilder builder = searchSourceBuilder.query(boolQueryBuilder);
SearchRequest request = new SearchRequest("1");
request.source(builder);
// 发起搜索请求
try {
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
System.out.println(response);
System.out.println("-----------");
SearchHit[] hits = response.getHits().getHits();
List<SearchHit> list= new ArrayList<>();
for (SearchHit hit : hits) {
list.add(hit);
}
return ApiResult.getSuccessBuilder().data(list).build();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
//简化过后
@GetMapping(value = "test")
public ApiResult test(){
SearchSourceBuilder builder = new SearchSourceBuilder();
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("retentionPeriod", "9002");
builder.query(termQueryBuilder);
SearchRequest request = new SearchRequest("1");
request.source(builder);
// 发起搜索请求
try {
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
System.out.println(response);
System.out.println("-----------");
SearchHit[] hits = response.getHits().getHits();
List<SearchHit> list= new ArrayList<>();
for (SearchHit hit : hits) {
list.add(hit);
}
return ApiResult.getSuccessBuilder().data(list).build();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
其他未列出查询参考文档 ctrl +F 搜索用法
关于客户端的总结
TransportClient //7.0 以下 8.0被弃用
RestHighLevelClient //推荐使用
ElasticsearchRestTemplate
//ElasticsearchRestTemplate 基 于 RestHighLevelClient 客户端的。需要自定义配置类,继承AbstractElasticsearchConfiguration,并实现 elasticsearchClient()抽象方法,创建 RestHighLevelClient 对象。
ElasticsearchRestTemplate 是 spring-data-elasticsearch 项目中的一个类,和其他 spring 项目中的 template
类似。