【问题标题】:Lucene - Return results ordered by the number of matching fieldsLucene - 返回按匹配字段数排序的结果
【发布时间】:2013-02-18 08:03:45
【问题描述】:

我有一个包含许多字段的 Lucene 索引。我想用它来查找按匹配字段数排序的文档,并让结果表明匹配的字段数。

在我的特定示例中,Lucene 索引中的文档表示网页,字段包括标题、元描述、h1 文本等。

如果我搜索“自行车”之类的术语,我希望返回在任何字段中包含“自行车”一词的所有文档。但是,我希望相关性分数表明包含关键字“自行车”的字段数。例如,如果文档在标题和元描述中包含“自行车”,我希望该文档的排名高于仅在标题中包含“自行车”的文档。我还希望能够确定第一个文档包含两个匹配项,而第二个文档只包含一个匹配项。关键字在特定领域的频率无关紧要。我只关心是否匹配。

我知道我可以使用 BooleanQuery 在单个字段上查找匹配项,我可以将这些组合起来对多个字段执行 AND 或 OR,但我不确定如何执行将返回匹配文档的查询在任何字段上,但还返回一些匹配多少字段的指示符。

任何帮助将不胜感激!

【问题讨论】:

    标签: java lucene


    【解决方案1】:

    在 Lucene 中,searching on a field 可以通过形成像 title:a web page 这样的查询来完成。假设您像上面一样为 n 个字段创建查询 q1、q2、.. qn。使用这些查询进行搜索将返回您存储在列表 l1、l2、.. ln 中的文档 ID。现在,您将它们合并到一个集合 S 中。对于 S 中的每个项目,您检查该项目所属的列表(或哪些列表)。如果我理解正确,那应该可以解决您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多