我想使用 flex 搜索的建议功能进行自动完成。
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters.html
它完全符合我的要求,但是我找不到为该字段创建索引的方法。搜索索引类型有FieldType枚举类型,但是它不包含suggest类型,并且我看不到任何扩展它的方法。文档中对此一无所知。甚至有可能通过冬眠搜索来索引某些 flex 特定字段?

最佳答案

详细说明一下:不,这在Hibernate Search 5中是不可能的,但是...

您可以自己实现自动完成功能。

定义一个分析器,该分析器使用edge-ngram token 文件管理器进行索引,并使用另一个供查询,如here所述。

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

@Field(name = "myField_autocomplete", analyzer = @Analyzer(definition = "edgeNGram"))
@Field(name = "dummy", analyzer = @Analyzer(definition = "edgeNGram_query")
String myField;

注意,由于Hibernate Search 5中的某些限制,“dummy”字段是必需的,以确保“edgeNGram_query”分析器在索引中可用。
有关此黑客的详细信息,请参见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();

请注意,这些限制(无法使用suggest类型,必须四处破解以定义仅查询分析器)将在仍在开发中的Hibernate Search 6中消失。

关于java - 如何将字段索引为建议类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54871428/

10-12 00:37
查看更多