【问题标题】:How to do grouping in Lucene search results?如何在 Lucene 搜索结果中进行分组?
【发布时间】:2008-12-05 05:13:18
【问题描述】:

如何按字段对 Lucene 返回的搜索结果进行分组(类似于 SQL Server 的)?

【问题讨论】:

    标签: lucene


    【解决方案1】:

    Lucene 3.4 现在支持分面搜索。在建立索引时,您指定一些补充内容,并在搜索时按查询和组进行搜索。

    对于接下来的 3 个文档,您将这些文档编入索引

    doc1: monday, 1pm,  3min    
    doc2: monday, 1pm,  4min    
    doc3: monday, 2pm,  3min
    

    您只能搜索第一个参数:monday,并获取值:3, 或者您可以向下钻取并搜索 monday/1pm 并获取值:2 或设置搜索深度 3 并获取

    monday :3
    monday/1pm :2
    monday/1pm/3min :1
    monday/1pm/4min :1
    monday/2pm :1
    monday/2pm/3min :1
    

    这是source sample

    但最重要的是阅读faceted search

    【讨论】:

      【解决方案2】:

      https://issues.apache.org/jira/browse/LUCENE-1421

      看来你不能。不过可能有一种解决方法: 这里有一个线程概述了其他人是如何做到的:here

      【讨论】:

        【解决方案3】:

        Lucene 有一些补充库,你需要一个:Grouping

        您不能按函数查询值或任意查询分组(如 Solr 所做的那样),但您可以按单值字段。

        类似的东西(分面搜索)将在 Lucene 4.0 中实现

        【讨论】:

        【解决方案4】:

        不清楚您是想要真正的类似于 SQL 的“GROUP BY”行为,还是仅仅想要“ORDER BY”行为。 Lucene 中没有聚合函数,因此“GROUP BY”必须在您的应用程序中实现,在 Lucene 之上。

        但是,按字段排序相当容易。确保对所需字段进行索引,并创建一个 org.apache.lucene.search.Sort 对象作为搜索条件的一部分传递;大多数搜索方法都有一个接受 Sort 实例的重载。

        如果您要实现自己的“GROUP BY”逻辑,让结果“ORDERED BY”正确的字段是有用的第一步。

        【讨论】:

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