8

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

4

4 回答 4

2

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

对于接下来的 3 个文档,您使用这些组进行索引

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

您可以仅搜索第一个参数:星期一,并获取值:3,或者您可以向下钻取并搜索星期一/下午 1 点并获取值:2 或设置搜索深度 3 并获取

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

这是源示例

但最重要的是阅读分面搜索

于 2011-09-22T15:12:55.493 回答
1

Lucene 有一些补充库,其中一个是您需要的:分组

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

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

于 2011-09-06T15:35:10.820 回答
1

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

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

于 2008-12-05T05:22:44.907 回答
0

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

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

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

于 2008-12-05T07:27:52.707 回答