Spring Boot Elasticsearch 多字段模糊搜索教程
在 Spring Boot 中使用 Elasticsearch 进行多字段模糊搜索,可以按照以下步骤进行操作:
- 首先,确保你的 Spring Boot 项目中已经添加了 Elasticsearch 的依赖。在 pom.xml 文件中添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
- 创建一个 Elasticsearch 的配置类,用于配置 Elasticsearch 的连接信息。可以在 application.properties 文件中添加以下配置:
spring.data.elasticsearch.cluster-name=my-cluster-name
spring.data.elasticsearch.cluster-nodes=localhost:9300
- 创建一个实体类,用于映射 Elasticsearch 中的文档。假设你的文档有两个字段:title 和 content。可以使用注解来定义字段的映射关系,例如:
@Document(indexName = "your-index-name", type = "your-type-name")
public class YourEntity {
@Id
private String id;
@Field(type = FieldType.Text, analyzer = "ik_max_word")
private String title;
@Field(type = FieldType.Text, analyzer = "ik_max_word")
private String content;
// getters and setters
}
在上面的例子中,我们使用了 IK 分词器(ik_max_word)来处理中文文本。
- 创建一个 Elasticsearch 的 Repository 接口,用于定义搜索方法。可以使用 Spring Data Elasticsearch 提供的查询注解,例如:
public interface YourEntityRepository extends ElasticsearchRepository<YourEntity, String> {
@Query("{"bool": {"should": [{"match": {"title": '?0'}}, {"match": {"content": '?0'}}]}}")
Page<YourEntity> search(String keyword, Pageable pageable);
}
在上面的例子中,我们使用了一个 bool 查询来同时匹配 title 和 content 字段。
- 在你的服务类中注入 YourEntityRepository,并使用它来进行搜索操作。例如:
@Service
public class YourService {
@Autowired
private YourEntityRepository yourEntityRepository;
public Page<YourEntity> search(String keyword, Pageable pageable) {
return yourEntityRepository.search(keyword, pageable);
}
}
现在,你可以在你的控制器中调用 search 方法来进行多字段模糊搜索了。例如:
@RestController
public class YourController {
@Autowired
private YourService yourService;
@GetMapping("/search")
public Page<YourEntity> search(@RequestParam("keyword") String keyword, @RequestParam("page") int page, @RequestParam("size") int size) {
return yourService.search(keyword, PageRequest.of(page, size));
}
}
以上就是在 Spring Boot 中使用 Elasticsearch 进行多字段模糊搜索的步骤。你可以根据自己的需求进行调整和扩展。
原文地址: https://www.cveoy.top/t/topic/caf7 著作权归作者所有。请勿转载和采集!