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

7
我正在使用 Spring-data-elasticsearchElasticsearchTemplate 函数。
我尝试通过在名为suggestCompletion字段上使用@CompletionField注释来创建索引。
@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文档中,他们说,为了使用suggest-complete函数,该字段应该具有类型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文档或其他注释中是否错过了任何配置?

1个回答

0
我猜你还没有为这个实体设置一个仓库,就像这样:
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

public interface CityRepository extends ElasticsearchRepository<City, String> {

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接