ES在java中的使用

ES查询技巧

ES

查询单个(String)

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.filter(QueryBuilders.termQuery("id", test.getId()));

查询多个(List)

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(QueryBuilders.termsQuery("status", test.getStatus()));

模糊查询

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(QueryBuilders.wildcardQuery("value", "*" + test.getKeyword() + "*"));

大于

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.filter(QueryBuilders.rangeQuery("createDt").gt(test.getCreateDtStart()));

小于

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();           boolQueryBuilder.filter(QueryBuilders.rangeQuery("createDt").lt(test.getCreateDtEnd()));

查询

SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(boolQueryBuilder);
sourceBuilder.storedField("id");
SearchRequest searchRequest = new SearchRequest("testIndex");
searchRequest.source(sourceBuilder);
try {
    SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
    List<String> ids = new ArrayList<>();
    searchResponse.getHits().forEach(hit -> {
        String id = hit.field("id").getValue();
        if (StringUtils.isNotEmpty(id)) {
            ids.add(id);
        }
    });
} catch (Exception e) {
    throw new Exception();
}    

分页

sourceBuilder.from(Math.max(0, test.getPageIndex() - 1) * test.getPageSize());
sourceBuilder.size(test.getPageSize());

排序

// 正序
sourceBuilder.sort("create_dt", SortOrder.ASC);
// 倒序
sourceBuilder.sort("create_dt", SortOrder.DESC);
Java使用 Elasticsearch 主要涉及以下几个步骤: 1. **设置开发环境**:确保已安装 Java 开发环境,并且配置好 Maven 或 Gradle 项目。Elasticsearch 提供了多个官方客户端,常用的有 `RestHighLevelClient` 和新的 `Elasticsearch Java Client`。可以依据项目需求选择合适的客户端进行集成 [^5]。 2. **添加依赖项**:如果使用 `RestHighLevelClient`,需要在 `pom.xml` 文件中添加以下 Maven 依赖: ```xml <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.17.0</version> <!-- 请根据Elasticsearch版本选择合适的客户端版本 --> </dependency> ``` 3. **连接到 Elasticsearch**:使用 `RestHighLevelClient` 创建一个客户端实例,连接到运行中的 Elasticsearch 服务器。例如: ```java RestHighLevelClient client = new RestHighLevelClient( RestClient.builder( new HttpHost("localhost", 9200, "http://"))); ``` 4. **执行 CRUD 操作**:可以使用客户端执行索引、获取、更新和删除文档等操作。例如,索引一个文档: ```java IndexRequest indexRequest = new IndexRequest("posts"); indexRequest.id("1"); String jsonString = "{" + "\"user\":\"kimchy\"," + "\"postDate\":\"2013-01-30\"," + "\"message\":\"trying out Elasticsearch\"" + "}"; indexRequest.source(jsonString, XContentType.JSON); IndexResponse indexResponse = client.index(indexRequest, RequestOptions.DEFAULT); ``` 5. **复杂查询**:Elasticsearch 支持复杂的查询,包括全文搜索、过滤、排序等。可以通过 `SearchSourceBuilder` 构建查询请求。例如,构建一个简单的查询: ```java SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("message", "Elasticsearch"); sourceBuilder.query(matchQueryBuilder); SearchRequest searchRequest = new SearchRequest("posts"); searchRequest.source(sourceBuilder); SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT); ``` 6. **索引管理**:可以创建、更新或删除索引。例如,创建一个索引: ```java CreateIndexRequest request = new CreateIndexRequest("posts"); client.indices().create(request, RequestOptions.DEFAULT); ``` 7. **聚合操作**:Elasticsearch 提供了强大的聚合功能,可以用于数据分析。例如,执行一个简单的聚合: ```java TermsAggregationBuilder aggregation = AggregationBuilders.terms("by_user").field("user.keyword"); SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.aggregation(aggregation); SearchRequest searchRequest = new SearchRequest("posts"); searchRequest.source(sourceBuilder); SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT); ``` 完成上述步骤后,可以通过 Java 应用程序与 Elasticsearch 进行交互,实现数据的存储、检索和分析等功能。在结束使用客户端时,记得关闭客户端以释放资源: ```java client.close(); ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值