【问题标题】:Searching related stories based on tag on priority basis基于标签优先搜索相关故事
【发布时间】:2016-06-28 11:21:40
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 我不确定我是否理解您要执行的操作。你能举个例子吗?
  • @Thomas 我真正想做的是,如果一个故事有我父故事中提到的所有 4 个标签,它会在结果中排​​在第 1 位,然后故事中至少有 3 个标签如果可用的话,然后用 2 个标签等等......
  • 嗯,在这种情况下,您可能想查看 lucene/solr 如何进行评分,但是如果您搜索 4 个(可选)标签,则得分应该越高,您获得的匹配越多。因此,您也许可以发出相应的查询并完成(类似于tags:tag1 OR tags:tag2 etc. - 不完全确定确切的语法)。

标签: java solr lucene related-content


【解决方案1】:

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

  • 故事 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),您可能会得到故事 2 - 因为它具有最“有价值”的标签(并且 Solr 的默认计算使用术语出现在文档中的时间除以它出现的文档总数)。

最佳结果可能(这将取决于您的用例)仍然是故事 2,但如果您真的想要获得匹配三个标签的文档,你必须以不同的方式来做。

如果你需要第二个选项,你可以使用函数查询来解决这个问题:termfreq 返回一个词在文档中出现的次数(如果你的标签在文档中是不同的,这将是 @987654324 @)。 sum 允许您对每个函数的值求和,例如:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 2012-05-23
    • 2017-05-27
    • 2014-12-17
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多