【问题标题】:Lucene: detecting missing spacesLucene:检测缺失的空格
【发布时间】:2012-09-26 02:20:05
【问题描述】:

我正在使用 Lucene.net 为大约 200 万种产品的数据库编写一个搜索引擎。我正在使用Snowball Analyzer,到目前为止,我对性能和结果集印象深刻。

我似乎无法克服的一个问题是检测搜索输入中缺少的空格。

例如:

用户正在寻找“Black Diamond”品牌产品,但他们搜索的是“blackdiamond”。

由于雪球分析器为 Black Diamond 创建了两个单独的 Tokens,因此我得到 0 个结果。

我可以采取什么方法来纠正这个问题?我对Shingle Analyzer(n-gram) 进行了一些研究,但不确定这是否有帮助。

是否可以将Shingle AnalyzerSpellChecker 结合使用(这会是一个有效的解决方案)吗?如果我可以在发生这种情况时通过 Did You Mean: 'Black Diamond'? 链接提示人们,这将是一个主意。

【问题讨论】:

  • 看看 lucene 4.0 WordBreakSpellChecker issues.apache.org/jira/browse/LUCENE-3523。如果它易于移植,那将是一个简单的解决方案
  • 我会试一试的。我敢打赌它对 4.0 有其他依赖关系。我正在运行 3.0,但也许我可以复制这个概念。谢谢

标签: lucene search-engine lucene.net


【解决方案1】:

如何最初运行用户查询,如果没有结果(或分数低于某个阈值),运行 N 次额外搜索(其中 N 是把单词分成两部分的可能性)显示用户获得最高分的可能性的结果。

【讨论】:

  • 我认为这不会很好,主要是因为数据集非常大。如果我正确理解您的说法,请在每个可能的索引处拆分单词。所以第一次迭代会产生标记:'b' & 'lackdiamond'。它们是带有单个字母 b 的产品,因此返回无效结果。我真的需要一种方法来为带有空格的短语创建一个标记并匹配它们。
  • 我在考虑运行 'b' AND 'lackdiamond' 这很可能不会返回任何内容,而第五次迭代为:'black' AND 'diamond' 选项预计会返回结果。但是谁说你想把用户限制在一个连词上,所以我想我的建议是一个更平庸的黑客,以防你不想投资一个专门的拼写检查解决方案。我站得更正了。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-11
  • 1970-01-01
  • 2020-05-02
相关资源
最近更新 更多