Java中介绍几种Elasticsearch的查询操作JavaElasticsearch

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 评论