gpt4 book ai didi

java - 如何使用 Spring-data-elastic 查询 Elastic

转载 作者:行者123 更新时间:2023-12-02 14:19:30 29 4
gpt4 key购买 nike

我是 Elastic 和 spring-data-elastic 的新手。我一直在此处和网络的其他区域进行搜索,但到目前为止尚未找到我的问题的答案。我希望 SO 能够提供帮助。

我正在为我的Users 表(名字、姓氏)中的一些记录建立索引,并且希望能够允许高级搜索。例如,如果我的名字是“Frances”并且我输入“Frank”,那么系统足够聪明,可以返回记录。对于“Robinson”和“Robinsen”等也是如此。

我已将 POJO 设置为以下内容:

Public Users {
@Field(fieldType = FieldType.String)
private String firstName;

@Field(fieldType = FieldType.String)
private String lastName

// mutators
...

}

目前,我正在使用 spring-data-elastic ElasticRepository 进行搜索,我相信如果我要允许高级搜索,可能需要更改它。一种选择是直接在 UserService 中使用 EntityManagerTemplate,但我还不知道如何去做。 .

正如我所描述的问题,这是索引问题还是搜索问题,或者可能两者兼而有之?我并不是在寻找任何人来做这项工作,只是为了给我指明正确的方向。

谢谢!

最佳答案

首先,不支持自动模糊查询生成,据documentation tells

因此我们必须使用自定义存储库方法添加。

假设您的基础存储库是

@Repository
public interface UserRepository extends CrudRepository<UserEntity, Long>

您必须创建一个自定义存储库接口(interface)来添加自定义方法(这就是 standard Spring data ,没有什么特别的)

public interface UserRepositoryCustom {
public List<User> findFuzzyByLastNameAndFirstName(String firstName, String lastName);
}

并让你的历史仓库实现这个接口(interface),即:

@Repository
public interface UserRepository extends CrudRepository<UserEntity, Long>, UserRepositoryCustom

现在,您需要以某种方式实现您的“自定义”界面。这很简单(再次查看手册,您必须遵守命名方案,以便 Spring 可以在运行时连接接口(interface)和实现):

public class UserRepositoryCustomImpl implements UserRepositoryCustom {
@Autowired protected ElasticsearchTemplate elasticsearchTemplate;

public List<User> findFuzzyByLastNameAndFirstName(String firstName, String lastName) {
Criteria c = new Criteria("firstName").fuzzy(firstName).and(new Criteria("lastName").fuzzy(lastName));
return elasticsearchTemplate.queryForList(new CriteriaQuery(c), CandidateEntity.class);
}
}

重新编译,重新启动,您应该能够让您的存储库像这样进行模糊搜索。

然后(请参阅问题评论),您可能还想将查询定义为字符串,并且不需要自定义实现。这取决于你。

关于java - 如何使用 Spring-data-elastic 查询 Elastic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39790434/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com