Spring 数据 Elasticsearch |按存储库进行全文搜索
Spring data Elasticsearch | Full text field search by repository
我根据 https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#elasticsearch.repositories 使用 Elastic 搜索存储库只是为了读取现有的索引数据。
我有一个分析过的字段,比方说全名,我在存储库中为此创建了搜索方法,如下所示:
Person.Java
class Person{
@Field("ID")
@Id
long _id;
@Field(value = "FULL_NAME", type = FieldType.Text)
String fullName;
}
存储库如下:
@Repository
public interface PersonDataRepository extends ElasticsearchRepository<Person, Long> {
//this does't work
List<Person> findAllByFullNameIn(List<String> fullNames);
//this works
List<Person> findAllByFullName(String fullName);
}
由于分析了字段,PersonDataRepository.findAllByFullNameIn(Stream.of("ABC").collect(Colelctors.toList())) 没有产生任何结果,而 PersonDataRepository.findAllByFullName("ABC") 效果很好。
我发现这是由于分析了字符串字段,如果我切换到关键字,它应该可以工作。
有人知道使用 Spring data elasticsearch 解决这个问题的方法吗?
版本:
Spring启动 - 2.3.1.RELEASE
Spring 数据弹性搜索:4.0.1.RELEASE
弹性搜索 - 7.6.2
通过使用@Query 注释编写手动查询解决了这个问题。
使用关键字而不是完整名称通过搜索查询:
{
"query":{
"bool":{
"must":[
{
"bool":{
"must":[
{
"terms":{
"FULL_NAME.keyword":[
"ABC"
]
}
}
]
}
}
]
}
},
"version":true
}
这是 a bug,最近已修复。它将包含在版本 4.0.4 和 4.1.RC1
编辑:这两个版本现已发布
我根据 https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#elasticsearch.repositories 使用 Elastic 搜索存储库只是为了读取现有的索引数据。
我有一个分析过的字段,比方说全名,我在存储库中为此创建了搜索方法,如下所示: Person.Java
class Person{
@Field("ID")
@Id
long _id;
@Field(value = "FULL_NAME", type = FieldType.Text)
String fullName;
}
存储库如下:
@Repository
public interface PersonDataRepository extends ElasticsearchRepository<Person, Long> {
//this does't work
List<Person> findAllByFullNameIn(List<String> fullNames);
//this works
List<Person> findAllByFullName(String fullName);
}
由于分析了字段,PersonDataRepository.findAllByFullNameIn(Stream.of("ABC").collect(Colelctors.toList())) 没有产生任何结果,而 PersonDataRepository.findAllByFullName("ABC") 效果很好。
我发现这是由于分析了字符串字段,如果我切换到关键字,它应该可以工作。
有人知道使用 Spring data elasticsearch 解决这个问题的方法吗?
版本: Spring启动 - 2.3.1.RELEASE Spring 数据弹性搜索:4.0.1.RELEASE 弹性搜索 - 7.6.2
通过使用@Query 注释编写手动查询解决了这个问题。
使用关键字而不是完整名称通过搜索查询:
{
"query":{
"bool":{
"must":[
{
"bool":{
"must":[
{
"terms":{
"FULL_NAME.keyword":[
"ABC"
]
}
}
]
}
}
]
}
},
"version":true
}
这是 a bug,最近已修复。它将包含在版本 4.0.4 和 4.1.RC1
编辑:这两个版本现已发布