有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

基于优先级标记的java相关故事搜索

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

假设我有一个带有4个标签的故事,那么我的相关故事逻辑将是

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

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

  • 第3步:搜索创建不同排列的两个标签&;与标签相关的组合>>;展示故事
  • 步骤4:逐个搜索标签,如果找到,则在“更像此”字段中显示相同的标签

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


共 (1) 个答案

  1. # 1 楼答案

    托马斯在评论中的建议是一个好主意,但可能会给你带来错误的结果——例如,如果你有两个非常常见的标签和两个问题中的两个故事特有的标签。即:

    • 故事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返回一个术语在文档中出现的次数(如果您的标记在文档中是不同的,这将是1sum允许对每个函数的值求和,例如:

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

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

    您还可以选择使用自定义的相似性类,该类将为每个术语返回相同的相似性分数(并且根据您使用的Solr版本,可以为每个字段(而不仅仅是核心字段)设置相似性)。我认为没有一个包括在内