休眠搜索模糊大于2

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

我有一个具有hibernate,lucene和hibernate-search的Java后端。现在,我想执行一个模糊查询,而不是0、1或2,但要允许查询与预期结果之间有更大的“差异”(以补偿长字拼写错误)。有什么办法可以做到这一点?允许的最大差异将稍后通过查询的长度进行计算。我想要的是一种自动完成搜索,可以纠正错误的字母。此自动完成功能仅应在给定查询之后搜索缺失的字符,而不要在其前面。如果与输入项相比,查询前面的字符缺失,则应将它们视为差异。

示例:在此示例中,最多允许使用2个不同字符。fooo应该匹配

fooo       (no difference)
fooobar    (only characters added -> autocomplete)
fouubar    (characters added and misspelled -> autocomplete and spelling correction)

fooo应该不匹配

barfooo    (we only allow additional characters behind the query, but this example is less important)
fuuu       (more than 2 differences)

这是我当前的SQL查询代码:

FullTextEntityManager fullTextEntityManager = this.sqlService.getFullTextEntityManager();
QueryBuilder queryBuilder = fullTextEntityManager.getSearchFactory().buildQueryBuilder().forEntity(MY_CLASS.class).overridesForField("name", "foo").get();
Query query = queryBuilder.keyword().fuzzy().withEditDistanceUpTo(2).onField("name").matching("QUERY_TO_MATCH").createQuery();
FullTextQuery fullTextQuery = fullTextEntityManager.createFullTextQuery(query, MY_CLASS.class);
List<MY_CLASS> results = fullTextQuery.getResultList();

注意:1.我使用org.apache.lucene.analysis.ngram.EdgeNGramFilterFactory进行索引编制,但这不应做任何更改。2.这使用的是非开放源代码的自定义框架。您可以忽略sqlService,它仅提供FullTextEntityManager并处理休眠状态下的所有事情,这些事情每次都不需要自定义代码。3.该代码已经有效,但仅适用于withEditDistanceUpTo(2),这意味着QUERY_TO_MATCH与数据库或索引中的匹配条目之间的最大2个“差异”。缺少字符也算作差异。4. withEditDistanceUpTo(2)不接受大于2的值。

有人有什么想法实现这一目标吗?

我有一个具有hibernate,lucene和hibernate-search的Java后端。现在,我想执行一个模糊查询,而不是0、1或2,但我想允许查询与预期的结果之间存在更多的“差异”。

java hibernate lucene hibernate-search
1个回答
0
投票

我不知道有什么解决方案可以指定允许的确切更改数量。

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