0

我需要根据故事的标签搜索相关的故事..

假设我有一个有 4 个标签的故事,所以我的相关故事逻辑将是

  • 第 1 步:搜索故事下的所有 4 个标签 >> 显示故事

  • 第 2 步:搜索 3 个标签,创建与标签相关的不同排列和组合 >> 显示故事

  • 第 3 步:搜索 2 个标签,创建与标签相关的不同排列和组合 >> 显示故事
  • 步骤 4 : 一个接一个地搜索标签,如果找到,在“更多类似”字段中显示相同。

我怎样才能做到这一点。我是 Solr 的新手请指导我...

4

1 回答 1

0

Thomas 在评论中的建议是一个好主意,但可能会给您错误的结果 - 例如,如果您有两个非常常见的标签,而两个标签是所讨论的两个故事所独有的。IE:

  • 故事 1 (foo, bar, the, is)
  • 故事 2 (foo, bar, ask, barf)
  • 故事 3 (baz, bar, the, is)
  • .. 以“the”和“is”为标签重复数以千计的其他故事

tag:(foo OR bar OR the OR is)如果您在显示第一个条目时进行搜索,您可能会得到 Story 2 - 因为它具有最“有价值”的标签(并且 Solr 的默认计算使用该术语在文档中出现的次数除以它出现的文件)。

最好的结果可能是(这将取决于您的用例)仍然是故事 2,但如果您真的想获得与三个标签匹配的文档,您将不得不以不同的方式进行。

如果您需要第二个选项,您可以使用函数查询来解决此问题:termfreq返回术语在文档中出现的次数(如果您的标签在文档中不同,则为1)。sum允许您对每个函数的值求和,例如:

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

.. 将为您用于排序的每个文档提供不同的标签计数。

您还可以选择使用自定义的 Similarity 类,这将为每个术语返回相同的相似性分数(并且根据您使用的 Solr 版本,可以为每个字段设置相似性(而不仅仅是核心)) . 我不认为其中包含一个,但有很多可用的示例

于 2016-06-28T15:30:26.590 回答