springboot elasticsearch整合
时间: 2023-04-22 11:03:51 浏览: 314
Spring Boot 和 Elasticsearch 可以很容易地整合在一起。首先,需要在 pom.xml 文件中添加 Elasticsearch 的依赖,然后在 application.properties 或者 application.yml 文件中配置 Elasticsearch 的连接信息,最后可以使用 Spring Data Elasticsearch 来操作 Elasticsearch。
相关问题
springboot elasticsearch 整合demo
好的,下面是一个简单的 Spring Boot 集成 Elasticsearch 的示例:
1. 首先,需要在 pom.xml 文件中添加 Elasticsearch 的依赖:
```xml
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.10.2</version>
</dependency>
```
2. 然后,在 application.yml 或 application.properties 中配置 Elasticsearch 的地址和端口:
```yaml
spring:
data:
elasticsearch:
cluster-name: elasticsearch
cluster-nodes: localhost:9200
```
3. 创建一个实体类,用于映射 Elasticsearch 中的数据:
```java
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Document(indexName = "user", shards = 1, replicas = 0)
public class User {
@Id
private String id;
private String name;
private Integer age;
}
```
4. 创建一个 Elasticsearch 的操作类,用于增删改查:
```java
@Component
public class ElasticsearchOperations {
private final ElasticsearchRestTemplate elasticsearchRestTemplate;
public ElasticsearchOperations(ElasticsearchRestTemplate elasticsearchRestTemplate) {
this.elasticsearchRestTemplate = elasticsearchRestTemplate;
}
public void save(User user) {
IndexQuery indexQuery = new IndexQueryBuilder()
.withIndexName("user")
.withObject(user)
.build();
elasticsearchRestTemplate.index(indexQuery);
}
public void delete(String id) {
elasticsearchRestTemplate.delete("user", id);
}
public void update(User user) {
IndexRequest indexRequest = new IndexRequest("user")
.id(user.getId())
.source(new ObjectMapper().convertValue(user, Map.class));
UpdateRequest updateRequest = new UpdateRequest("user", user.getId())
.doc(new ObjectMapper().convertValue(user, Map.class))
.upsert(indexRequest);
elasticsearchRestTemplate.update(updateRequest);
}
public List<User> search(String keyword) {
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.matchQuery("name", keyword))
.build();
return elasticsearchRestTemplate.queryForList(searchQuery, User.class);
}
}
```
5. 最后,在 Controller 中使用 ElasticsearchOperations 进行增删改查操作:
```java
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private ElasticsearchOperations elasticsearchOperations;
@PostMapping
public void save(@RequestBody User user) {
elasticsearchOperations.save(user);
}
@DeleteMapping("/{id}")
public void delete(@PathVariable String id) {
elasticsearchOperations.delete(id);
}
@PutMapping
public void update(@RequestBody User user) {
elasticsearchOperations.update(user);
}
@GetMapping
public List<User> search(@RequestParam String keyword) {
return elasticsearchOperations.search(keyword);
}
}
```
以上就是一个简单的 Spring Boot 集成 Elasticsearch 的示例。
SpringBoot整合ElasticSearch
### Spring Boot 整合 Elasticsearch 示例教程
#### 配置连接
为了使Spring Boot应用程序能够与Elasticsearch服务器建立通信,在`application.properties`文件中需加入如下设置来指定集群节点地址以及名称:
```properties
spring.data.elasticsearch.cluster-nodes=localhost:9200
spring.data.elasticsearch.cluster-name=my-elasticsearch-cluster
```
此操作确保了应用可以找到并访问到相应的Elasticsearch实例[^1]。
#### 修改Elasticsearch配置以支持跨域请求
对于希望允许来自不同源的HTTP请求的情况,可以在`elasticsearch/config/elasticsearch.yml`文件内添加特定参数实现对CORS的支持。这一步骤有助于解决开发过程中遇到的一些浏览器安全策略问题[^2]。
#### 添加依赖项
在构建工具(如Maven或Gradle)中的项目描述文件里引入必要的库,以便于后续的操作能顺利执行。以下是基于Maven的一个例子:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
```
上述依赖会自动拉取所有必需组件,并简化了与Elasticsearch交互的过程[^3]。
#### 处理中文搜索需求
默认情况下,Elasticsearch可能无法很好地处理汉语字符。因此建议安装适合的语言分析插件——比如IK Analyzer或者其他更专业的解决方案,从而提高针对中文文本查询的效果。具体做法是在启动脚本或者Dockerfile中声明所需版本号和下载链接等信息。
#### 构建简单的REST API接口用于测试目的
下面给出了一段Java代码片段作为示范,展示了怎样创建一个控制器类接受GET方法调用来触发全文检索功能;同时利用JSON格式定义了一个基本查询语句模板,其中包含了通配符匹配逻辑:
```java
@RestController
@RequestMapping("/api/search")
public class SearchController {
@Autowired
private ElasticsearchOperations elasticsearchTemplate;
@GetMapping("/{term}")
public ResponseEntity<List<String>> search(@PathVariable String term) {
NativeSearchQuery build = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.boolQuery().must(
QueryBuilders.queryStringQuery("*"+term+"*").field("name").analyzeWildcard(true)))
.build();
List<String> results = elasticsearchTemplate.queryForList(build, String.class);
return ResponseEntity.ok(results);
}
}
```
这段程序接收路径变量形式传入的关键字参数,并将其嵌入至预设模式之中再发送给ES服务端解析返回结果集[^4]。
阅读全文
相关推荐
















