ES中GetRequest和SearchRequest的区别

`GetRequest` 和 `SearchRequest` 是 Elasticsearch Java 客户端中两种不同类型的请求,它们用于从 Elasticsearch 中检索数据,但在使用方式和作用上有所不同:

1. **GetRequest**:
   - **作用**:用于检索单个文档的请求。
   - **用法**:你需要指定索引、文档类型和文档 ID,然后 Elasticsearch 将返回该文档的内容。
   - **场景**:适用于已知文档 ID 的情况,通常用于获取特定文档的详细信息。

2. **SearchRequest**:
   - **作用**:用于执行搜索查询的请求。
   - **用法**:你可以在搜索请求中设置各种查询条件,例如基于字段值的条件、过滤器、聚合等,然后 Elasticsearch 将返回匹配查询条件的文档列表。
   - **场景**:适用于需要根据复杂查询条件检索文档的情况,通常用于执行全文搜索、过滤、聚合等操作。

总的来说,`GetRequest` 用于检索单个文档,而 `SearchRequest` 用于执行搜索查询并返回匹配查询条件的多个文档。

因此 两者处理响应的过程也不一样

一种返回的是hit   一种返回的是json

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供相关的信息和代码示例。首先,您需要确保您的Spring Boot项目包含以下依赖项: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.0.0</version> </dependency> ``` 接下来,您需要在application.properties文件添加以下配置: ```properties spring.data.elasticsearch.cluster-name=my-application spring.data.elasticsearch.cluster-nodes=localhost:9300 ``` 然后,您可以编写Elasticsearch工具类来执行一些常见的操作,例如索引文档、搜索文档等。以下是一个示例工具类: ```java import org.elasticsearch.action.ActionListener; import org.elasticsearch.action.bulk.BulkRequest; import org.elasticsearch.action.bulk.BulkResponse; import org.elasticsearch.action.get.GetRequest; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.update.UpdateRequest; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.SearchHits; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.io.IOException; import java.util.Map; @Component public class ElasticsearchUtil { @Autowired private RestHighLevelClient restHighLevelClient; /** * 索引文档 * @param indexName 索引名称 * @param id 文档ID * @param sourceMap 文档内容 * @throws IOException */ public void indexDocument(String indexName, String id, Map<String, Object> sourceMap) throws IOException { IndexRequest request = new IndexRequest(indexName); if (id != null) { request.id(id); } request.source(sourceMap); restHighLevelClient.index(request, RequestOptions.DEFAULT); } /** * 更新文档 * @param indexName 索引名称 * @param id 文档ID * @param sourceMap 文档内容 * @throws IOException */ public void updateDocument(String indexName, String id, Map<String, Object> sourceMap) throws IOException { UpdateRequest request = new UpdateRequest(indexName, id); request.doc(sourceMap); restHighLevelClient.update(request, RequestOptions.DEFAULT); } /** * 批量索引文档 * @param indexName 索引名称 * @param sourceMaps 文档内容列表 * @throws IOException */ public void bulkIndexDocuments(String indexName, Map<String, Object>[] sourceMaps) throws IOException { BulkRequest request = new BulkRequest(); for (Map<String, Object> sourceMap : sourceMaps) { IndexRequest indexRequest = new IndexRequest(indexName); indexRequest.source(sourceMap); request.add(indexRequest); } restHighLevelClient.bulk(request, RequestOptions.DEFAULT); } /** * 批量更新文档 * @param indexName 索引名称 * @param idList 文档ID列表 * @param sourceMap 文档内容 * @throws IOException */ public void bulkUpdateDocuments(String indexName, String[] idList, Map<String, Object> sourceMap) throws IOException { BulkRequest request = new BulkRequest(); for (String id : idList) { UpdateRequest updateRequest = new UpdateRequest(indexName, id); updateRequest.doc(sourceMap); request.add(updateRequest); } restHighLevelClient.bulk(request, RequestOptions.DEFAULT); } /** * 获取文档 * @param indexName 索引名称 * @param id 文档ID * @return * @throws IOException */ public Map<String, Object> getDocument(String indexName, String id) throws IOException { GetRequest request = new GetRequest(indexName, id); return restHighLevelClient.get(request, RequestOptions.DEFAULT).getSourceAsMap(); } /** * 搜索文档 * @param indexName 索引名称 * @param keyword 关键词 * @param size 每页数量 * @param from 起始位置 * @return * @throws IOException */ public SearchHits searchDocuments(String indexName, String keyword, int size, int from) throws IOException { SearchRequest searchRequest = new SearchRequest(indexName); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(QueryBuilders.matchQuery("content", keyword)); searchSourceBuilder.from(from); searchSourceBuilder.size(size); searchSourceBuilder.timeout(TimeValue.timeValueSeconds(60)); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); return searchResponse.getHits(); } } ``` 最后,您可以在您的代码使用ElasticsearchUtil类,并根据您的需求调用它的方法来执行所需的操作。以下是一个示例调用: ```java import org.elasticsearch.search.SearchHits; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.io.IOException; import java.util.HashMap; import java.util.Map; @RestController public class DemoController { @Autowired private ElasticsearchUtil elasticsearchUtil; @GetMapping("/index") public String index() throws IOException { Map<String, Object> sourceMap = new HashMap<>(); sourceMap.put("title", "Elasticsearch 7 教程"); sourceMap.put("content", "Elasticsearch 7 入门教程"); elasticsearchUtil.indexDocument("my_index", null, sourceMap); return "索引文档成功!"; } @GetMapping("/search") public String search(@RequestParam("keyword") String keyword, @RequestParam("size") int size, @RequestParam("from") int from) throws IOException { SearchHits searchHits = elasticsearchUtil.searchDocuments("my_index", keyword, size, from); return searchHits.toString(); } } ``` 希望这些代码示例可以帮助您整合Elasticsearch 7到您的Spring Boot项目,并提供了一些常见的操作示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值