当前位置: 首页 > 面试题库 >

如何用Spring-data-elastic查询Elastic

权弘新
2023-03-14
问题内容

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

我正在索引Users表中的一些记录(firstName,lastName),并且希望能够允许高级搜索。因此,例如,如果我的名字是“
Frances”,并且输入“ Frank”,那么系统足够智能,可以返回记录。与“鲁宾逊”和“鲁宾森”等相同。

我将POJO设置为以下内容:

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

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

    // mutators
    ...

 }

目前,我正在使用弹簧弹性数据进行ElasticRepository搜索,我认为如果允许高级搜索,可能必须更改。一种选择是直接在中使用EntityManager或,但是我不确定该怎么做。Template``UserService

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

谢谢!


问题答案:

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

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

假设您的基本存储库是

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

您必须创建一个Custom仓库接口来添加您的自定义方法(这是所有标准Spring数据,没什么特别的)

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

并让您的历史存储库实现此接口,即:

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

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

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);
    }
}

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

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



 类似资料:
  • 我使用spring-data-elasticsearch框架从elasticsearch服务器获取查询结果,java代码如下: 我在服务器中获取原始查询日志,如下所示: 根据查询日志,spring data elasticsearch将为查询添加大小限制

  • 我使用的是Spring Data JPA 1.7.1 这里有一个例子:

  • 我需要一些关于实现spring JPA查询的建议。由于输入长度的原因,我的查询很复杂。 作为输入,我有: 15条件-如果不为空,则检查相等; 2条件-在if not null之间进行检查 此外,输出必须是可分页的。 有其他选择吗? 唯一的方法是用CriteriaBuilder构建一个自定义查询?

  • 我试图在elasticsearch spring数据中使用@query annotation来进行复杂的查询,但当我尝试下面的简单查询时,我得到了一个错误 堆栈跟踪

  • 我正在通过jHipster使用Spring Data Elasticsearch支持,并试图更多地了解如何使用搜索来扩展数据库中的一些新关系。 我有了一个新的嵌套关系,它有自己的索引: 我想将结果筛选到特定用户“friend1.id”,并在嵌套文档上搜索匹配的详细信息? 但这似乎没有返回任何结果?

  • 问题内容: 我有实体和 我可以按用户实体获得所有测试: 但是我可以使用哪个查询查找所有测试? 问题答案: 以下方法签名将使你想要: 这是使用Spring Data JPA 的属性表达式功能。签名将转换为。请注意,这将对给定的用户名执行完全匹配。