首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将字段索引为建议类型?

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

Stack Overflow用户
提问于 2019-02-26 01:16:40
回答 1查看 168关注 0票数 0

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

EN

回答 1

Stack Overflow用户

发布于 2019-02-26 17:40:27

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

你可以自己实现自动补全。

定义一个分析器,该分析器具有一个用于索引的edge-ngram令牌过滤器和另一个用于查询的分析器,如here所述。

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

代码语言:javascript
运行
复制
@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

然后重新索引您的数据。

然后,您将通过以下方式查询:

代码语言:javascript
运行
复制
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中消失,它还在开发中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54871428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档