Elasticsearch是一个开源的分布式搜索和分析引擎,基于Apache Lucene搜索引擎构建。它提供了一个高效的、可伸缩的全文搜索和分析引擎,适用于各种类型的数据,包括结构化、非结构化和地理空间数据。
Elasticsearch最初是为了解决大规模数据的全文搜索而开发的,但后来它的功能得到了扩展,可以用于日志分析、实时数据分析、地理信息系统等各种用途。
本篇文章通过示例讲解一下如何使用ES进行基础的查询操作
涉及到的包有
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.MultiMatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
首先创建一个SearchSourceBuilder对象
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
构建BoolQuerBuilder对象
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
查询方式1,完全匹配查询
List<String> queryClassCodes = Arrays.asList(classCode.split(","));
boolQueryBuilder.must(QueryBuilders.termsQuery("classCode", queryClassCodes));
查询方式2,数字小于查询
boolQueryBuilder.must(QueryBuilders.rangeQuery("security").lte(security));
查询方式3,两者有一个成立即可查询结果
MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery(keywords).field("title", 3).field("content", 2);
boolQueryBuilder.must(multiMatchQueryBuilder);
查询方式4,范围查询
String[] times = syncTime.split(",");
if (times.length == 2) {
boolQueryBuilder.must(QueryBuilders.rangeQuery("syncTime").format("yyyy-MM-dd HH:mm:ss").gte(times[0]).lte(times[1]));
}
查询方式5,一种条件成立或者另一种条件成立
BoolQueryBuilder authorizedQuery = QueryBuilders.boolQuery().should(
QueryBuilders.boolQuery()
.mustNot(
QueryBuilders.termQuery("type", "pushed"))).should(
QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("type", "pushed"))
.must(QueryBuilders.termQuery("users", SecurityUtils.getCurrentUser().getUsername()))
);
boolQueryBuilder.must(authorizedQuery);
执行查询操作,并给查询结果添加highlight高亮显示
searchSourceBuilder.query(boolQueryBuilder);
searchSourceBuilder.from(offset).size(pageSize);
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.field("content").fragmentSize(100).numOfFragments(1);
highlightBuilder.preTags("<span style='color:red'>");
highlightBuilder.postTags("</span>");
searchSourceBuilder.highlighter(highlightBuilder);
SearchRequest searchRequest = new SearchRequest(indexName);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = restClient.getRestHighLevelClient().search(searchRequest, RequestOptions.DEFAULT);
SearchHit[] hitArray = searchResponse.getHits().getHits();
List<EsDocumentView> documents = new ArrayList<>();
for (SearchHit documentFields : hitArray) {
String json = documentFields.getSourceAsString();
Document documentDetail = JSONObject.parseObject(json, Document.class);
}
评论列表
0/1000
共 0 评论