`
xyliufeng
  • 浏览: 87561 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

lucene实现结果分组统计,类似group by

阅读更多
import java.io.IOException;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.Field.Index;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.index.IndexWriter.MaxFieldLength;
import org.apache.lucene.search.DuplicateFilter;
import org.apache.lucene.search.Filter;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.Version;


public class DuplicateFilterTest {

    public static void main(String[] args) {

        Directory dir = new RAMDirectory();

        Document doc = new Document();
        doc.add(new Field("id", "binbin", Store.YES, Index.NOT_ANALYZED));
        doc.add(new Field("string", "haha", Store.YES, Index.NOT_ANALYZED));
        doc.add(new Field("time", "20100801", Store.YES, Index.NOT_ANALYZED));
        doc.add(new Field("duplicate", "123456", Store.YES, Index.NOT_ANALYZED));

        Document doc1 = new Document();
        doc1.add(new Field("id", "yaoyao", Store.YES, Index.NOT_ANALYZED));
        doc1.add(new Field("string", "haha", Store.YES, Index.NOT_ANALYZED));
        doc1.add(new Field("time", "20100801", Store.YES, Index.NOT_ANALYZED));
        doc1.add(new Field("duplicate", "123456", Store.YES,Index.NOT_ANALYZED));
        
        Document doc11 = new Document();
        doc11.add(new Field("id", "liufeng", Store.YES, Index.NOT_ANALYZED));
        doc11.add(new Field("string", "haha", Store.YES, Index.NOT_ANALYZED));
        doc11.add(new Field("time", "20100801", Store.YES, Index.NOT_ANALYZED));
        doc11.add(new Field("duplicate", "123456", Store.YES,Index.NOT_ANALYZED));
                        

        Document doc2 = new Document();
        doc2.add(new Field("id", "zhangjian", Store.YES, Index.NOT_ANALYZED));
        doc2.add(new Field("string", "haha", Store.YES, Index.NOT_ANALYZED));
        doc2.add(new Field("time", "20100801", Store.YES, Index.NOT_ANALYZED));
        doc2.add(new Field("duplicate", "123455", Store.YES,Index.NOT_ANALYZED));
                
                        

        Document doc3 = new Document();
        doc3.add(new Field("id", "liweicheng", Store.YES, Index.NOT_ANALYZED));
        doc3.add(new Field("string", "haha", Store.YES, Index.NOT_ANALYZED));
        doc3.add(new Field("time", "20100801", Store.YES, Index.NOT_ANALYZED));
        doc3.add(new Field("duplicate", "123451", Store.YES,Index.NOT_ANALYZED));
                
                        

        try {
            IndexWriter indexWriter = new IndexWriter(dir,
                    new StandardAnalyzer(Version.LUCENE_29), true,
                    MaxFieldLength.LIMITED);
            indexWriter.addDocument(doc);
            indexWriter.addDocument(doc1);
            indexWriter.addDocument(doc11);
            indexWriter.addDocument(doc2);
            indexWriter.addDocument(doc3);
            indexWriter.close();

            Query query = new TermQuery(new Term("string", "haha"));
            Filter filter = new DuplicateFilter("duplicate");
            IndexSearcher indexSearcher = new IndexSearcher(dir);
            TopDocs top = indexSearcher.search(query, filter, 200);
            ScoreDoc[] scoreDocs = top.scoreDocs;

            for (ScoreDoc scoreDoc : scoreDocs) {
                Document rdoc = indexSearcher.doc(scoreDoc.doc);
                System.out.print("id:"+rdoc.get("id") +"  排重ID:" +rdoc.get("duplicate"));
                Query queryDuplicate = new TermQuery(new Term("duplicate", rdoc.get("duplicate")));
               System.out.println("转载:"+ indexSearcher.search(queryDuplicate, 100).totalHits
               );
                
            }

        } catch (CorruptIndexException e) {
            e.printStackTrace();
        } catch (LockObtainFailedException e) {
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}




id:liufeng  排重ID:123456转载:3
id:zhangjian  排重ID:123455转载:1
id:liweicheng  排重ID:123451转载:1
分享到:
评论

相关推荐

    Lucene group by ,分组实现

    "Lucene group by" 指的就是在 Lucene 中实现基于特定字段的分组操作,类似于 SQL 中的 GROUP BY 子句。这使得用户能够按类别聚合文档,例如,根据作者、日期或其他分类标准来查看搜索结果。 在 Lucene 中,分组...

    一步一步跟我学习lucene(12)---lucene搜索之分组处理group查询

    在"一步一步跟我学习lucene(12)---lucene搜索之分组处理group查询"中,我们将重点关注如何利用Lucene实现这一高级搜索功能。 首先,Lucene是一个开源全文搜索引擎库,它为Java开发者提供了构建高效、可扩展的搜索...

    Lucene5学习之Group分组统计

    "Lucene5学习之Group分组统计" 这个标题指出我们要讨论的是关于Apache Lucene 5版本中的一个特定功能——Grouping。在信息检索领域,Lucene是一个高性能、全文搜索引擎库,而Grouping是它提供的一种功能,允许用户对...

    lucene.netGroup

    而在锤子搜索引擎的分组统计功能中,Lucene.Net不仅实现了高效的搜索,还提供了丰富的分组统计能力,为用户带来了更加精细化的数据洞察体验。对于开发者来说,掌握Lucene.Net的使用技巧和最佳实践,无疑能提升其在...

    lucene去重、分组统计

    可以配置采集网站的图片,包含分组统计,相同数据合并功能,主要是给群内成员来个demo,让大家有个学习的demo 小试牛刀、临时写的,莫吐槽 需要用到mysql数据库,项目里有个image.sql文件,请先执行一下,然后...

    lucene 分组统计

    ### Lucene 分组统计 #### 一、Lucene 分组统计...综上所述,Lucene 通过 `FieldCache` 实现分组统计是一种高效的方法。开发者可以通过合理设计字段类型和缓存策略来充分利用这项功能,从而满足复杂的应用场景需求。

    lucene-grouping-3.5.0.jar分组统计+分类统计插件

    lucene-grouping-3.5.0.jar分组统计+分类统计插件 分组统计+分类统计

    lucene 实现类似百度搜索

    通过以上步骤和技巧,我们可以使用 Lucene 实现一个强大的搜索引擎,提供类似百度的搜索体验。无论是在网站、应用还是大数据环境中,Lucene 都能以其高效的全文检索能力,为用户提供快速、准确的搜索结果。

    Lucene.net分组

    通过WebGroupBy这个名称推测,可能存在一个针对Web应用的分组实现,可能是对HTTP请求的处理,或者是一个自定义的控件或中间件,用于在Web环境中优雅地呈现分组结果。 通过以上这些知识点,我们可以构建出一个强大的...

    java代码 结合 lucene 实现的 公交搜索系统

    java代码 结合 lucene 实现的 公交搜索系统 java代码 结合 lucene 实现的 公交搜索系统 java代码 结合 lucene 实现的 公交搜索系统 java代码 结合 lucene 实现的 公交搜索系统 java代码 结合 lucene 实现的 公交...

    lucene实现企业产品检索

    在本文中,我们将深入探讨如何使用Lucene来实现一个类似当当网的企业产品检索系统,特别关注如何结合庖丁解牛分词器提升搜索体验。 首先,我们需要理解Lucene的基本工作原理。Lucene的核心是建立索引,将原始文本...

    Lucene全文搜索 分组,精确查找,模糊查找

    `Grouping` API则允许我们对查询结果进行多级分组,例如,先按地区分组,再按性别分组,提供了一种灵活的分类方式。 二、Lucene精确查找 精确查找是指用户希望找到与查询词完全匹配的结果。在Lucene中,我们可以...

    lucene实现索引查询

    10. **提取查询结果**:从Document中通过Field的名称获取查询结果,如`document.get("group_id")`。 以上就是使用Lucene实现索引查询的基本流程。实际应用中,可能还需要考虑错误处理、性能优化、多线程支持、查询...

    lucene包,lucene实现核心代码

    在Java的网络搜索实现中,Lucene扮演着至关重要的角色,它能够帮助开发者快速构建自己的搜索引擎。 在"lucene包"中,我们可以找到Lucene的核心组件和类,这些类负责索引和搜索文档。以下是Lucene实现的核心知识点:...

    用Lucene实现Java里面的搜索引擎

    本篇将深入探讨如何利用Java和Lucene来实现一个搜索引擎。 首先,我们要理解Lucene的基本概念。Lucene是一个纯Java库,其核心功能包括文本分析、索引和搜索。文本分析是将原始文本转化为可搜索的表示形式,通常涉及...

    android+lucene实现全文检索并高亮关键字

    在Android平台上实现全文检索并高亮关键字是一项技术挑战,但通过集成Apache Lucene库,可以有效地解决这个问题。Apache Lucene是一个高性能、可扩展的信息检索库,它为开发人员提供了强大的文本搜索功能。以下是对...

    lucene实现全文搜索

    通过理解并熟练运用Document、Field、Directory、Analyzer和IndexWriter等核心概念,开发者可以构建出高效的全文搜索解决方案,实现类似搜索引擎的功能。在实际应用中,可以根据需求调整分析器、优化索引策略,以...

    利用Lucene 实现高级搜索

    ### 利用Lucene实现高级搜索的关键知识点 #### Lucene简介 Lucene是Apache软件基金会下的一个开源全文检索库,提供了高性能的文本搜索能力。它不仅适用于网站的搜索功能,还可以用于任何需要文本搜索的应用场景,如...

Global site tag (gtag.js) - Google Analytics