如何将字段索引为建议类型?

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

我想使用弹性搜索的建议功能进行自动完成。 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters.html它完全符合我的要求,但我找不到为这个领域创建索引的方法。搜索索引类型有FieldType枚举类型,但它不包含suggest类型,我没有看到任何扩展它的方法。文档中没有任何内容。甚至可以通过hibernate-search索引一些弹性特定字段?

java elasticsearch hibernate-search
1个回答
1
投票

详细说明我的评论:不,这在Hibernate Search 5中是不可能的,但是......

您可以自己实施自动填充。

定义一个带有edge-ngram标记过滤器的分析器,用于索引,另一个用于查询,如qazxsw poi所述。

然后在要添加自动完成的字段上使用这些分析器:

here

注意,由于Hibernate Search 5中的一些限制,需要“虚拟”字段,以确保索引中的“edgeNGram_query”分析器可用。有关此hack的详细信息,请参阅@Field(name = "myField_autocomplete", analyzer = @Analyzer(definition = "edgeNGram")) @Field(name = "dummy", analyzer = @Analyzer(definition = "edgeNGram_query") String myField;

然后重新索引您的数据。

然后你会这样查询:

here

请注意,这些限制(无法使用String userInput = ...; QueryBuilder builder = fullTextEntityManager.getSearchFactory().buildQueryBuilder() .forEntity(Contact.class) .overridesForField("myField", "edgeNGram_query") .get(); Query luceneQuery = builder.keyword().onField("myField").matching(userInput).createQuery(); FullTextQuery query = fullTextEntityManager.createQuery( luceneQuery, MyEntity.class ); List<MyEntity> results = query.getResultList(); 类型,不得不破解定义仅查询分析器)将在Hibernate Search 6中消失,Hibernate Search 6仍处于开发阶段。

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