SOLR查询参数以避免与同一制造商发生洪水

时间:2012-06-14 15:49:15

标签: search solr

我在这里浏览过很长时间,但从未有过一个尚未提出的问题。所以这里:

我使用SOLR搜索遇到了一个问题,其中SOLR上的一些搜索(比如DVD播放器)往往会在前50个结果中返回来自同一制造商的大量搜索结果。

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

此逻辑仅适用于极端广泛的查询,如“DVD播放器”或“硬盘驱动器”,我自然不会用它来塑造“三星DVD播放器”的搜索结果。

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

3 个答案:

答案 0 :(得分:0)

我没有用过这个,但我相信现场崩溃/分组会是你想要的。

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

如果我正确地理解了这个功能,它会通过对类似的新闻报道进行分组来对http://news.google.com/的类似结果进行分组。

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:-1)

实现这一目标是一个漫长而复杂的过程,但值得尝试。假设您要搜索的主要字段是名为title的单个字段,首先您需要确保其中包含“dvd player”的所有文档具有相同的分数。这可以通过忽略solr评分参数来完成,比如field norm(set omitNorms = true)&术语频率(写一个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. 在solrconfig.xml中使用此新的相似性类添加
  2. similarity class =“my.package.CustomSimilarity”

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