我需要根据故事的标签搜索相关的故事..
假设我有一个有 4 个标签的故事,所以我的相关故事逻辑将是
第 1 步:搜索故事下的所有 4 个标签 >> 显示故事
第 2 步:搜索 3 个标签,创建与标签相关的不同排列和组合 >> 显示故事
- 第 3 步:搜索 2 个标签,创建与标签相关的不同排列和组合 >> 显示故事
- 步骤 4 : 一个接一个地搜索标签,如果找到,在“更多类似”字段中显示相同。
我怎样才能做到这一点。我是 Solr 的新手请指导我...
我需要根据故事的标签搜索相关的故事..
假设我有一个有 4 个标签的故事,所以我的相关故事逻辑将是
第 1 步:搜索故事下的所有 4 个标签 >> 显示故事
第 2 步:搜索 3 个标签,创建与标签相关的不同排列和组合 >> 显示故事
我怎样才能做到这一点。我是 Solr 的新手请指导我...
Thomas 在评论中的建议是一个好主意,但可能会给您错误的结果 - 例如,如果您有两个非常常见的标签,而两个标签是所讨论的两个故事所独有的。IE:
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 版本,可以为每个字段设置相似性(而不仅仅是核心)) . 我不认为其中包含一个,但有很多可用的示例。