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 中实现基于特定字段的分组操作,类似于 SQL 中的 GROUP BY 子句。这使得用户能够按类别聚合文档,例如,根据作者、日期或其他分类标准来查看搜索结果。 在 Lucene 中,分组...
在"一步一步跟我学习lucene(12)---lucene搜索之分组处理group查询"中,我们将重点关注如何利用Lucene实现这一高级搜索功能。 首先,Lucene是一个开源全文搜索引擎库,它为Java开发者提供了构建高效、可扩展的搜索...
"Lucene5学习之Group分组统计" 这个标题指出我们要讨论的是关于Apache Lucene 5版本中的一个特定功能——Grouping。在信息检索领域,Lucene是一个高性能、全文搜索引擎库,而Grouping是它提供的一种功能,允许用户对...
而在锤子搜索引擎的分组统计功能中,Lucene.Net不仅实现了高效的搜索,还提供了丰富的分组统计能力,为用户带来了更加精细化的数据洞察体验。对于开发者来说,掌握Lucene.Net的使用技巧和最佳实践,无疑能提升其在...
可以配置采集网站的图片,包含分组统计,相同数据合并功能,主要是给群内成员来个demo,让大家有个学习的demo 小试牛刀、临时写的,莫吐槽 需要用到mysql数据库,项目里有个image.sql文件,请先执行一下,然后...
### Lucene 分组统计 #### 一、Lucene 分组统计...综上所述,Lucene 通过 `FieldCache` 实现分组统计是一种高效的方法。开发者可以通过合理设计字段类型和缓存策略来充分利用这项功能,从而满足复杂的应用场景需求。
lucene-grouping-3.5.0.jar分组统计+分类统计插件 分组统计+分类统计
通过以上步骤和技巧,我们可以使用 Lucene 实现一个强大的搜索引擎,提供类似百度的搜索体验。无论是在网站、应用还是大数据环境中,Lucene 都能以其高效的全文检索能力,为用户提供快速、准确的搜索结果。
通过WebGroupBy这个名称推测,可能存在一个针对Web应用的分组实现,可能是对HTTP请求的处理,或者是一个自定义的控件或中间件,用于在Web环境中优雅地呈现分组结果。 通过以上这些知识点,我们可以构建出一个强大的...
java代码 结合 lucene 实现的 公交搜索系统 java代码 结合 lucene 实现的 公交搜索系统 java代码 结合 lucene 实现的 公交搜索系统 java代码 结合 lucene 实现的 公交搜索系统 java代码 结合 lucene 实现的 公交...
在本文中,我们将深入探讨如何使用Lucene来实现一个类似当当网的企业产品检索系统,特别关注如何结合庖丁解牛分词器提升搜索体验。 首先,我们需要理解Lucene的基本工作原理。Lucene的核心是建立索引,将原始文本...
`Grouping` API则允许我们对查询结果进行多级分组,例如,先按地区分组,再按性别分组,提供了一种灵活的分类方式。 二、Lucene精确查找 精确查找是指用户希望找到与查询词完全匹配的结果。在Lucene中,我们可以...
10. **提取查询结果**:从Document中通过Field的名称获取查询结果,如`document.get("group_id")`。 以上就是使用Lucene实现索引查询的基本流程。实际应用中,可能还需要考虑错误处理、性能优化、多线程支持、查询...
在Java的网络搜索实现中,Lucene扮演着至关重要的角色,它能够帮助开发者快速构建自己的搜索引擎。 在"lucene包"中,我们可以找到Lucene的核心组件和类,这些类负责索引和搜索文档。以下是Lucene实现的核心知识点:...
本篇将深入探讨如何利用Java和Lucene来实现一个搜索引擎。 首先,我们要理解Lucene的基本概念。Lucene是一个纯Java库,其核心功能包括文本分析、索引和搜索。文本分析是将原始文本转化为可搜索的表示形式,通常涉及...
在Android平台上实现全文检索并高亮关键字是一项技术挑战,但通过集成Apache Lucene库,可以有效地解决这个问题。Apache Lucene是一个高性能、可扩展的信息检索库,它为开发人员提供了强大的文本搜索功能。以下是对...
通过理解并熟练运用Document、Field、Directory、Analyzer和IndexWriter等核心概念,开发者可以构建出高效的全文搜索解决方案,实现类似搜索引擎的功能。在实际应用中,可以根据需求调整分析器、优化索引策略,以...
### 利用Lucene实现高级搜索的关键知识点 #### Lucene简介 Lucene是Apache软件基金会下的一个开源全文检索库,提供了高性能的文本搜索能力。它不仅适用于网站的搜索功能,还可以用于任何需要文本搜索的应用场景,如...