【问题标题】:How do I perform a fuzzy query for each word in a sentence using Lucene / Hibernate Search?如何使用 Lucene / Hibernate Search 对句子中的每个单词执行模糊查询?
【发布时间】:2014-08-07 17:27:31
【问题描述】:

我正在尝试使用其中可能存在拼写错误的句子,例如:“I love yava, IDEA IntelliJ, JoyoScapt, GWT, hypernate, Rolling and spring”,并执行与标签匹配的模糊搜索我已被 Lucene 索引,例如“休眠”和“java”。

我认为我可以通过生成如下所示的查询字符串来实现这一点:

“我~0.5 love~0.5 yava,~0.5 IDEA~0.5 IntelliJ,~0.5 JoyoScrap,~0.5 GWT,~0.5 hypernate,~0.5 Rolling~0.5 and~0.5 spring~0.5”

不幸的是,这种行为很奇怪。如果句子较短,那么拼写错误的单词将与我给出的示例标签匹配。但是,当句子变长时,它们就不再匹配了。

任何人都知道完成我想要做的事情的正确方法,即基于每个单词的模糊逻辑匹配?我还尝试为每个单词建立一个单独的术语查询,然后将它们添加到 BooleanQuery,但没有得到更好的结果。

【问题讨论】:

    标签: lucene hibernate-search


    【解决方案1】:

    您的查询字符串看起来有点奇怪,有一些“错位”',',但这可能只是一个错字。基本上模糊搜索的想法是正确的。但是,我不会使用 0.5 参数。它是默认设置,在 Lucene 4 中已弃用。

    你能举一些更具体的例子说明结果的奇怪之处吗?

    作为一种替代方法,您可以为您的标签建立一个同义词列表,其中包含您的标签最常见的拼写错误版本。这样你就不需要依赖模糊搜索了。您将同义词与标签一起编入索引。

    【讨论】:

    • 嗨@hardy,逗号没有放错地方。它们在原句中,我只是用〜0.5替换了空格。我不担心实际数字(即 0.5),无论如何我打算使用 0.7。我的问题是无论使用多少,行为都很奇怪。
    • 比如说我有一个标签“java”,我搜索的句子很短,例如“Love yava”,然后拼写错误的单词 (yava) 将匹配标签“java”。这是我所期望的。但是,如果该句子与我在原始帖子中给出的句子一样长,并且还包含拼写错误的单词“yava”,则不会返回标签“java”。如果我在每个单词的基础上进行模糊匹配,我希望“yava”匹配“java”,无论它在什么句子中。
    猜你喜欢
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    相关资源
    最近更新 更多