Solr中的单字搜索不准确

时间:2014-06-07 01:59:37

标签: solr

我正在开发一个在e-Commence网站上搜索产品的应用程序。我们在Solr索引中提供了大约5,000,000种产品,包括所有常规字段:标题,描述等。虽然多字搜索短语效果很好(例如"夏季凉鞋"或"高尔夫衬衫")。单字搜索不太好。

例如,当我搜索"吉他" Solr返回了一堆提到吉他的产品。不知何故,吉他音乐CD,如何弹奏吉他和吉他形钥匙链的指南排名高于实际的吉他。第一个真正的吉他出现在第120位左右。 从用户的角度来看,我在想,如果我进入" gutar"我正在寻找真正的吉他。如果我需要有关如何弹吉他的指南,我会搜索"吉他演奏指南",顺便说一下,这种方式非常有效。

如果你搜索"鞋"同样的问题。它带回了一堆音乐CD。显然,有许多这样的鞋子在标题或描述中都有。

我做的一个观察是这些"无关紧要"搜索结果中的产品标题和描述非常简短。我想这会提高那里每个单词的意义。如果你有一个音乐CD"法国鞋"的标题,并没有太多其他可去,Solr被欺骗。那么我在想是否有办法为文本较长的文档分配更高的排名?我不得不使用字段长度的概念来操作,不确定它是否在Solr中是一个简单的调整。

还有其他建议吗?

1 个答案:

答案 0 :(得分:0)

你的观察是正确的。在Solr评分中,有一种称为长度标准化的东西。它在较短的字段中对匹配进行加权,而在较长的字段中对匹配进行加权,其他条件相同。要禁用字段的长度规范化,请在solrconfig.xml的字段定义中将omitNorms设置为true,如下所示:

<field name="text" type="text_general" indexed="true" stored="true" omitNorms="true" />

有几种方法可以解决您遇到的问题。其中之一是使用query elevation来确保您选择的特定文档显示在给定查询字符串(如guitar)的结果顶部。如果您要提升一小组静态文档,例如如果你只有一些吉他,你总是希望在搜索guitar时显示在搜索结果的顶部。

另一种方法是拥有一个“类别”字段,其值如“吉他”,“吉他演奏指南”等。使用Solr's DisMax query parser,在qf参数中包含类别以及其他字段(标题,说明等)(即要搜索的字段),并为“类别”字段提供大量提升。因为“吉他”比“吉他演奏指南”短(因此默认情况下受益于长度标准化),并且由于“类别”字段的大量提升,查询字符串guitar应该在“吉他“类别比”吉他演奏指南“类别中的文档得分高。

更好的是,询问用户他们是否真的在寻找吉他或吉他演奏指南。您可以在搜索结果中显示类别,并让用户按类别细化搜索。或者你可以在你的网站上提出问题的自动建议功能(如果有的话),这甚至更好。例如。在Amazon.com上,如果您输入“吉他”,它会猜测您可能正在寻找乐器,应用程序,玩具,书籍等,并允许您从中选择。

Search for "guitar" on Amazon.com