2016-06-28 73 views
0

我需要搜索基于一个故事的标签有关的故事有关的故事..搜索基于标签优先的基础上

说我有4个标签的故事,所以我的相关报道逻辑将

  • 步骤1:搜索下一个故事>>展示故事所有4个标签

  • 步骤2:搜索3个标签创建不同的排列&组合相关标签>>展示故事

  • 步骤3:搜索2个标签创建与标签>>展示故事的不同排列组合&
  • 步骤4:搜索标签一前一后如果找到,在“更多像这样”字段中显示相同。

我该如何做到这一点。我是Solr的新手请指导我...

+0

我不知道我明白你想做什么。你能提供一个例子吗? – Thomas

+0

@Thomas我真正想要做的是,如果一个故事中的所有4个标签都在我父母的故事中提到,它将在第一个结果中出现,然后如果有效的话至少有3个标签的故事2标签等等...... – mridul4c

+2

嗯,在这种情况下,您可能想要了解lucene/solr如何进行评分,但如果您搜索4(可选)标签,则评分应该越高,得到的匹配越高。所以你可能只需发出一个相应的查询并完成(类似于'tags:tag1或者tags:tag2等等 - 不完全确定确切的语法)。 – Thomas

回答

0

托马斯在评论中的建议是一个好主意,但可以给你错误的结果 - 例如,如果你有两个非常普通的标签和两个独特的两个故事在问题中。即:

  • 故事1(FOO,栏,是)
  • 故事2(FOO,酒吧,抚,BARF)
  • 故事3(巴兹,栏,是)
  • ..重复成千上万的其他故事以“”和“是”为标签

如果显示的第一个条目时,搜索tag:(foo OR bar OR the OR is),你可能得到总动员2而不是 - 因为它有最“值钱“标签(和默认计算Solr使用该术语在文档中出现的次数除以其出现的文档总数)。

最好结果可能是(这将取决于你的使用情况)还是总动员2,但如果你真的想要得到它匹配三个标签的文件,你就必须这样做一不同的方式。

如果您需要第二个选项,您可以使用函数查询来解决此问题:termfreq返回文档中某个术语的次数(以及您的标签在文档中不同,这将是1)。 sum允许你从每个功能的值相加,所以像:

sum(termfreq(tag, 'foo'), termfreq(tag, 'bar'), termfreq(tag, 'the'), termfreq('is')) 

..会给你在每次使用排序文档不同标签计数。

您还可以选择使用自定义相似性类,它将为每个术语返回相同的相似性分数(并且根据您使用的Solr版本,可以为每个字段设置相似性(而不仅仅是核心))。我不认为有一个,but there's plenty of examples available