0

我对 Solr 比较陌生,所以如果我遗漏了一些明显的东西,请原谅我。我有一个允许用户搜索音乐艺术家的应用程序。索引来自具有正确拼写的只读数据库,因此在索引方面我已经弄清楚了。

然而,在查询方面,我需要预测各种拼写错误/差异,并希望帮助 solr 找到这些实例。从我们旧的本土搜索解决方案中,我有一个正则表达式列表和他们申请的艺术家。当我尝试使用 PatternReplaceCharFilterFactory 将这些转换为 solr 时,我注意到有些工作完美,而另一些则根本不工作......它们之间似乎没有韵律或理由。

例如:

<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="em[ei]n[ei]m" replacement="Eminem"/>

准确地捕捉了 Eminem 的常见拼写错误。但对于 311 乐队:

<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[Tt]hree [Ee]leven" replacement="311"/>

不工作。另一个例子是九英寸钉子:

<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="((nine|9).*inch.*nails\b)|(n\.? ?i\.? ?n\.?\b)" replacement="Nine Inch Nails"/>

非常适合查找乐队名称的最常见模式。但是对于夏娃 6:

       <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="[Ee]ve.{0,4}([Ss]ix|6)" replacement="Eve 6"/>

在使用此过滤器时,我是否缺少一些基本的东西?我已经尝试了我上面提到的正则表达式的许多变体(甚至使用像“三十一”这样的文字),但仍然没有成功。我已经尝试使有问题的过滤器成为分析器中唯一的 PatternReplaceCharFilterFactory 。我也确定这些项目在索引中是正确的,因为当我搜索正确的拼写时,它会返回正确的结果。

有什么建议么?

斯诺达尔

4

2 回答 2

3

我怀疑问题不在于您的 Char Factory,而在于毕竟出现的问题,特别是标记器。如果您使用标准标记器,它将摆脱您刚刚放入流中的数字。如果您不需要将文本拆分为标记,则可以查看KeywordTokenizerFactory

通常,在 Solr 4+ 中解决此问题的最佳方法是管理 WebUI 中的分析屏幕。它允许您针对特定字段类型输入文本,并查看分析链中每个组件之后发生的情况。

于 2013-03-05T04:31:09.573 回答
0

我建议将 SynonymFilter 用于您描述的那种应用程序。它允许您提供一个外部文件,您可以在其中列出单词及其同义词,例如:

eminem <=> emenem
nine <=> 9

如果您在此之前使用 LowerCaseFilter,您将不必在同义词中对大小写规范化大惊小怪。只要您不进行标记,您也应该能够处理 311 案例(即按照 Alexander Rafalovitch 的建议使用 KeywordTokenizer)。

于 2013-03-05T04:36:59.383 回答