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

编辑:这两个版本现已发布