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