Spring-data-elasticsearch @CompletionField 不会创建类型为“complete”的字段

问题描述 投票:0回答:1

我正在使用

Spring-data-elasticsearch
并且有
ElasticsearchTemplate
功能。

我尝试通过在名为

@CompletionField
Completion
字段上使用
suggest
注释来创建索引。

@Document(indexName = "city", type = "city")
public class City {

    @Id
    private String id;

    @Field
    private String name;

    @CompletionField
    private Completion suggest;
}

@CompletionField
注释应用于elasticsearch的建议完成功能。就像 java-doc 中描述的那样:

/**
 * Based on the reference doc - http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-suggesters-completion.html
 *
 * @author Mewes Kochheim
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Documented
@Inherited
public @interface CompletionField {

elasticsearch 文档 中,他们说该字段应该具有类型

complete
才能使用建议完成功能。

但是,如果我创建索引,不幸的是,字段

suggest
没有类型
complete
,而是具有类型
keyword
。当我尝试查询建议查询时,这给了我一个错误。

CompletionSuggestionBuilder s = SuggestBuilders.completionSuggestion("suggest").prefix(text, Fuzziness.ONE);
SuggestBuilder b = new SuggestBuilder().addSuggestion("test-suggest", s);
SearchResponse response = elasticsearchTemplate.suggest(b, "city");

例外:

java.lang.IllegalArgumentException: no mapping found for field [suggest]

我的所有代码都基于 spring-data-elasticsearch git 存储库。

ElasticsearchTemplateCompletionTests.java

CompletionAnnotatedEntity.java

我是否遗漏了

City
文档或任何其他注释中的任何配置?

java spring-boot elasticsearch spring-data-elasticsearch
1个回答
0
投票

我猜你还没有为这个实体设置一个存储库,如下所示:

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

public interface CityRepository extends ElasticsearchRepository<City, String> {

}
© www.soinside.com 2019 - 2024. All rights reserved.