2012-06-14 34 views
3

我一直在这里很长一段时间的浏览器,但从来没有一个问题,还没有问。所以这里去:SOLR查询参数,以避免与同一制造商泛滥

我遇到了一个问题,使用SOLR搜索在SOLR(让我们说DVD播放器)的一些搜索往往会返回来自同一制造商在前50个结果中的很多搜索结果。

现在假设我想为我的最终用户提供搜索的最佳体验,同时也为我的产品目录中的最佳产品种类提供一种减少同类品牌以避免出现的缺点在搜索结果中超过5次。为了记录,我使用了一个相当标准的DisMax搜索处理程序。

这个逻辑只适用于非常广泛的查询,如'DVD播放器'或'硬盘',自然我不会用它来塑造'三星DVD播放器'的搜索结果。

我不知道SOLR是否有一个可以自动执行此操作的漂亮功能,或者我是否必须开始修改搜索处理程序逻辑。

+0

好问题+1。 – Yavar

+0

您是否找到了解决方案? –

回答

-1

要做到这一点是一个漫长而复杂的过程,但值得尝试。假设您要搜索的主要字段是名为title的单个字段,首先您需要确保其中包含“dvd player”的所有文档具有相同的分数。这可以通过忽略Solr的得分parameteres像场标准(集omitNorms =真)&词频做(写Solr的插件忽视它)附加代码..

实施细则:

1)编译如下类,放入Solr的WEB-INF/classes中


package my.package; 
import org.apache.lucene.search.DefaultSimilarity; 

public class CustomSimilarity extends DefaultSimilarity { 

public float tf(float freq) { 
    return freq > 0 ? 1.0f : 0.0f; 
} 

} 

  1. 在solrco nfig.xml使用这个新的相似性类别添加

相似性类别=“my.package.CustomSimilarity”

这一切都将帮助你做出的成绩都在他们的标题相同的“DVD播放器”的文件。之后,您可以定义一个随机类型的字段。然后,当您查询solr时,您可以先按照评分排序,然后按随机字段排序。由于所有包含DVD播放器的文档的分数都是相同的,因此结果将按照随机字段进行排列,从而为您的产品目录中的客户提供更多种类的产品。

+0

嗨Suryansh 这可能是我要去的方法。我会开始研究这个,再次感谢您的帮助 - 戴夫 –

0

我没有使用过这个,但我相信字段崩溃/分组将是你想要的。

http://wiki.apache.org/solr/FieldCollapsing

如果我正确地它会组相似的结果那种通过将类似的新闻报道http://news.google.com/是如何做的理解这个功能。

+0

感谢您的提示!不幸的是,它看起来像涉及与产品的顺序混淆(我已经有了一个我想保留的评分系统)。我宁愿没有按照制造商分组结果的结果,也不希望有一种方法可以对结果进行排序,而不管组织的结果如何(这种方式会打败组功能的目的:)我目前的产品列表页面是产品网格,我正在寻找一个很好的丰富选择制造商回来的基础上的类别。 –

0

这里有一些想法,虽然我没有自己尝试过。

您可以使用Carr插件Solr来对搜索结果进行聚类,然后将其提供给自定义RequestHandler以重新排序(从每个制造商群集中挑选樱桃)多样性的结果。

但是,这种方法有一个缺点,您可能需要获取大于必要的值,其次搜索结果将是合成的。

+0

因为我没有制造商的具体清单或者我想从制造商处获得的具体数量的结果,我有一种感觉,这将是相当严格的实施方式。我喜欢胡萝卜的想法,尽管我可能正在研究另一个项目。谢谢你的提示! –