如何在Lucene搜索结果中进行分组?

时间:2008-12-05 05:13:19

标签: lucene

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

4 个答案:

答案 0 :(得分: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

这是source sample

但最重要的是阅读faceted search

答案 1 :(得分:1)

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

看来你似乎不能。可能有一个解决方法: 这里有一个主题,其中概述了其他人如何做到这一点:here

答案 2 :(得分:1)

Lucene有一些免费的图书馆,一个是你需要的:Grouping

您不能按功能查询值分组,也不能按任意查询分组(如Solr),但您可以使用单值字段。

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

答案 3 :(得分:0)

目前尚不清楚您是想要一个类似SQL的“GROUP BY”行为,还是仅仅是一个“ORDER BY”行为。在Lucene中没有像聚合函数那样的东西,所以“GROUP BY”必须在你的应用程序中实现,在Lucene之上。

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

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