我在这里浏览过很长时间,但从未有过一个尚未提出的问题。所以这里:
我使用SOLR搜索遇到了一个问题,其中SOLR上的一些搜索(比如DVD播放器)往往会在前50个结果中返回来自同一制造商的大量搜索结果。
现在假设我想为我的最终用户提供最佳的搜索体验,以及我的目录中最好的各种产品,我将如何提供一种类型的缺点,以减少同一品牌的出现搜索结果超过5次。为了记录,我使用了一个相当标准的DisMax搜索处理程序。
此逻辑仅适用于极端广泛的查询,如“DVD播放器”或“硬盘驱动器”,我自然不会用它来塑造“三星DVD播放器”的搜索结果。
我不知道SOLR是否有一个漂亮的功能可以自动执行此操作,或者我是否必须开始修改搜索处理程序逻辑。
答案 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;
}
}
similarity class =“my.package.CustomSimilarity”
这一切都将帮助您在标题中使用“DVD播放器”对所有文档进行评分。之后,您可以定义一个随机类型的字段。然后,当您查询solr时,您可以先按分数排列,然后按随机字段排列。由于所有包含DVD播放器的文档的分数都相同,因此结果将按随机字段排列,从而为客户提供目录中更多种类的产品。