使用lucene做分组统计
来源:互联网 发布:linux的两大就业方向 编辑:程序博客网 时间:2024/04/30 13:48
这段时间考虑lucene的分组统计问题,网上查了不少文档,都没有给出效率比较高的解决方案。可以使用HitCollector对每个查询出来的document进行遍历,读取要分组的字段进行统计,但这样效率太低。以下是lucene API中对HitCollector的说明:
Note: This is called in an inner search loop. For good search performance, implementations of this method should not call Searcher.doc(int) or IndexReader.document(int) on every document number encountered. Doing so can slow searches by an order of magnitude or more.
所以现在要考虑的是不调用Searcher.doc(int) or IndexReader.document(int)这两个方法,就能获得要分组字段的值。由于lucene支持排序,是否可以将分组字段作为排序字段,然后直接读取出来进行分组呢?查询Lucene的javadoc文档,IndexSearcher提供了这个api
public TopFieldDocs search(Weight weight,Filter filter,int nDocs,Sort sort) throws IOException
调用这个方法可以获得排序字段的值,这样就可以进行分类统计了。代码如下:
searcher = new IndexSearcher(indexHome+"/"+indexDir);
TopFieldDocs docs=searcher.search(query, filter, topNum, sort);
//docs.scoreDocs数组对应查出的文档,仅包括排序字段的值
for(int i=0;i<docs.scoreDocs.length;i++){
FieldDoc fieldDoc = (FieldDoc) docs.scoreDocs[i];
//fieldDoc.fields数组对应每个排序字段
for (int j = 0; j < fieldDoc.fields.length; j++) {
String sortValue=fieldDoc.fields[j].toString();
result[j].addValue(sortValue);
}
Note: This is called in an inner search loop. For good search performance, implementations of this method should not call Searcher.doc(int) or IndexReader.document(int) on every document number encountered. Doing so can slow searches by an order of magnitude or more.
所以现在要考虑的是不调用Searcher.doc(int) or IndexReader.document(int)这两个方法,就能获得要分组字段的值。由于lucene支持排序,是否可以将分组字段作为排序字段,然后直接读取出来进行分组呢?查询Lucene的javadoc文档,IndexSearcher提供了这个api
public TopFieldDocs search(Weight weight,Filter filter,int nDocs,Sort sort) throws IOException
调用这个方法可以获得排序字段的值,这样就可以进行分类统计了。代码如下:
searcher = new IndexSearcher(indexHome+"/"+indexDir);
TopFieldDocs docs=searcher.search(query, filter, topNum, sort);
//docs.scoreDocs数组对应查出的文档,仅包括排序字段的值
for(int i=0;i<docs.scoreDocs.length;i++){
FieldDoc fieldDoc = (FieldDoc) docs.scoreDocs[i];
//fieldDoc.fields数组对应每个排序字段
for (int j = 0; j < fieldDoc.fields.length; j++) {
String sortValue=fieldDoc.fields[j].toString();
result[j].addValue(sortValue);
}
- 使用lucene做分组统计
- lucene 分组统计查询
- lucene实现分组统计的方法
- bobo-browse为Lucene添加分组统计
- 利用bobo-browse 实现lucene的分组统计功能
- 利用bobo-browse 实现lucene的分组统计功能
- Lucene聚类分组统计功能(grouping)
- 利用bobo-browse 实现lucene的分组统计功能
- GridView使用【GridViewHelper】分组统计
- datatable使用groupby进行分组统计
- XtraGrid使用心得(折叠式主细档、分组统计)
- datatable使用groupby进行分组统计
- C# datatable使用groupby进行分组统计
- GROUPING …. WITH ROLLUP 做分组汇总 统计(转)
- MYSQL:巧用临时变量做分组统计
- ClientDataSet 的 Aggregate 字段,可以用来做分组统计
- 分组统计
- 分组统计
- 开源软件和许可证
- C++开源跨平台类库
- COALESCE()、isnull()、nullif()函数的用法
- 解决web显示音标乱码的问题
- ASP 编程中 20 个非常有用的例子
- 使用lucene做分组统计
- Spring's transaction configuration
- Struts Nested 标签介绍
- String 对象
- 十年磨一剑:心中无敌 无敌于天下
- 在C#中应用哈希表(Hashtable)
- Oracle 10g Replication -------多主体复制站点的配置步骤
- 存在问题
- 新一轮互联网创业浪潮