使用Solr进行不规则说唱歌手名称的全文搜索

6
我正在我的说唱网站上实现全文搜索功能,但在歌手和歌曲名称方面遇到了一些问题。
例如,有人可能想使用查询词“camron”(省略中间的撇号)搜索说唱歌手“Cam'ron”。同样,有人可能会使用查询词“3peat”搜索歌曲“3 Peat”。
"

臭名昭著的B.I.G.”是一个有点奇怪的情况:“The Notorious BIG”和“The Notorious B.I.G.”都可以使用(我猜是因为solr.StandardFilterFactory从缩写中删除了句点?),但是没有尾随句点的“The Notorious B.I.G”(即减去尾随句点)不能使用。

理想情况下,这些名称的所有合理变体都应该可用。我猜答案与solr.WordDelimiterFilterFactory有关,但我不确定。

此外,如果相关的话,我正在使用Rails的Sunspot。

"
1个回答

10

是的,你说得对。你需要正确配置WordDelimiterFilterFactory。尝试启用所有属性,并不要忘记启用preserveOriginal属性,它将保存您的原始术语。

generateWordparts - 将从B.I.G.术语生成B I G

generateNumberParts - 将从3Peat术语生成3 Peat

catenateWords - 将从B.I.G.术语生成BIG

catenateNumbers - 将从Rapper 802.11术语生成Rapper 80211

catenateAll - 将从Rapper-802.11术语生成Rapper80211

splitOnCaseChange - 将从GanGsTa术语生成Gan Gs Ta

preserveOriginal - 还将保存原始术语。从Rapper-802.11RuuLlZ将生成 - Rapper-802.11RuuLlZ


2
非常感谢您的建议。我已经将以下内容添加到 schema.xml 文件中:<filter class="solr.WordDelimiterFilterFactory" stemEnglishPossessive="1" splitOnNumerics="1" splitOnCaseChange="1" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" preserveOriginal="1"/>。这似乎解决了除“B.I.G”之外的所有问题。您有什么想法吗? - Tom Lehman
这可能是由于 StandardTokenizer 引起的。我会用 WhitespaceTokenizer 替换它。为了分析您的分析器是如何工作的,您可以在 Solr 中使用 "Analysis"(如果您有 Web 接口)。在那里,您可以看到哪个分析器正在转换您的文本,以及其工作结果。 - Yurish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接