首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用弹簧数据弹性查询弹性

如何用弹簧数据弹性查询弹性
EN

Stack Overflow用户
提问于 2016-09-30 11:25:53
回答 2查看 5.1K关注 0票数 2

我对弹性和弹簧数据弹性很陌生。我一直在搜索这里和其他领域的网站,但到目前为止,一直未能找到我的问题的答案。我希望这样也许能帮上忙。

我正在从我的Users表(firstName,lastName)中索引一些记录,我希望能够允许高级搜索。因此,例如,如果我有‘弗朗西斯’的名字,我输入‘弗兰克’,那么系统是足够聪明的返回记录。罗宾逊和罗宾森等也是如此。

我已经将我的POJO设置为:

代码语言:javascript
复制
Public Users {
    @Field(fieldType = FieldType.String)
    private String firstName;

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

    // mutators
    ...

 }

目前,我正在使用弹簧数据弹性ElasticRepository进行我的搜索,我相信,如果我要允许高级搜索,这可能必须改变。一种选择是直接在EntityManagerTemplate中使用UserService,但是我还不确定如何做到这一点。

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

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-30 13:49:15

首先,就文档说明而言,不支持自动模糊查询生成。

因此,我们将不得不使用自定义存储库方法添加。

假设您的基本存储库是

代码语言:javascript
复制
@Repository
public interface UserRepository extends CrudRepository<UserEntity, Long>

您必须创建一个自定义存储库接口来添加自定义方法(这完全是标准弹簧数据,没有什么特别的)

代码语言:javascript
复制
public interface UserRepositoryCustom {
    public List<User> findFuzzyByLastNameAndFirstName(String firstName, String lastName);
}

并使您的历史回购实现此接口,即:

代码语言:javascript
复制
@Repository
public interface UserRepository extends CrudRepository<UserEntity, Long>, UserRepositoryCustom

现在,您需要以某种方式实现“自定义”接口。这很容易(再次查看手册,您必须尊重命名方案,以便Spring能够在运行时连接接口和实现):

代码语言:javascript
复制
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);
    }
}

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

再说一遍(请参阅问题注释),您也可能希望将查询定义为字符串,并且不需要自定义实现。这取决于你。

票数 7
EN

Stack Overflow用户

发布于 2018-10-16 12:09:54

您还可以通过@Query注释访问搜索引擎:

代码语言:javascript
复制
public interface UserRepository extends ElasticsearchRepository<Users, String> {

@Query("{\"multi_match\": {\"query\": \"?0\", \"fields\": [\"firstName\", \"lastName\"], \"fuzziness\": \"AUTO\"}}")
Page<Users> find(String q, Pageable pageable);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39790434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档