2014-06-07 81 views
0

我正在开发一个应用程序以在电子开始网站上搜索产品。我们将大约5,000,000种产品放入Solr索引中,包括所有常规字段:标题,说明等。而多字搜索短语可以很好地工作(例如“夏季凉鞋”或“高尔夫衬衫”)。单词搜索不太好。Solr中的单词搜索不准确

例如,当我搜索“吉他”时,Solr会返回一串提到吉他的产品。不管怎样,不管怎样,吉他音乐CD在指导如何弹吉他和吉他形钥匙链方面的排名都高于实际的吉他。第一个实际的吉他出现在第120位左右。 从用户的角度来看,我在想,如果我输入“gutar”,我正在寻找真正的吉他。如果我需要关于如何弹吉他的指导,我会搜索“吉他演奏指南”,它的方式完美。

同样的问题,如果你搜索“鞋”。它带回了一堆音乐CD。显然有很多这样的标题或描述都有单词鞋。

我发现的一个观察结果是,搜索结果中的这些“不相关的”产品的标题和描述都非常短。我猜想这里提出了每个单词的重要性。如果你有一个音乐CD“法国鞋”的标题,并没有太多其他的经过,索尔被欺骗。那么我是否有办法将更高级别的文档分配给文本较长的文档?我将不得不使用字段长度的概念来确定它是否是Solr中的一个简单调整。

其他建议?

回答

0

你的观察是正确的。在Solr评分中,有一些东西叫做长度标准化。它在一个较短的领域中比一个比较长的领域中的比赛更重要,其他条件相同。要禁用长度正常化的领域,solrconfig.xml设置omitNorms在该领域的定义为真,这样的:

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

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

另一种方法是有一个“类别”栏,其中有像“吉他”,“吉他玩指南”等价值观。使用Solr's DisMax query parser,在qf参数(即要搜索的字段)中包含类别以及其他字段(标题,说明等),并给予“类别”字段很大的提升。因为“吉他”比“吉他演奏指南”短(因此默认长度归一化),并且由于“类别”字段的大量提升,所以查询字符串guitar应该使“吉他”类别中的文档更高分数比“吉他演奏指南”类别中的文档要高。

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

Search for "guitar" on Amazon.com