我是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 的属性表达式功能。签名将转换为。请注意,这将对给定的用户名执行完全匹配。