`

Lucene Filter&Sort SortField

阅读更多

String Index_Store_Path = "index";
		IndexWriter iw = null;
		try {
			iw = new IndexWriter(Index_Store_Path,new StandardAnalyzer(),true);
			iw.setUseCompoundFile(false);
			
			String[] contents = {"ab bc cd de ef fg gh","ab","ab bc","ab bc cd","ab bc cd de",
					"ab bc cd de ef","ab bc cd de ef fg","ab bc bc de ef fg gh hi"};
			
			Field f = null;
			Document doc = null;
			
			for(int i=0;i<contents.length;i++){
				doc = new Document();
				f = new Field("bk", contents[i], Field.Store.YES, Field.Index.TOKENIZED);
				doc.add(f);
				
				f = new Field("id", "id"+i,Field.Store.YES, Field.Index.TOKENIZED);
				doc.add(f);
				
				//通过改变激励因子更改排名 > Sort 不能同时为多个Field指定排序标准 > SortField
				if(i== contents.length-1){
					doc.setBoost(2f);
				}
				iw.addDocument(doc);
			}
			
		} catch (CorruptIndexException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (LockObtainFailedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			iw.close();
		} catch (CorruptIndexException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		try {
			IndexSearcher is = new IndexSearcher(Index_Store_Path);
			
			TermQuery tq = new TermQuery(new Term("bk", "bc"));
			
			//多Field的排序
			Sort s = new Sort();
			SortField sf = new SortField("id",SortField.STRING, false);
			SortField sf1 = new SortField("bk", SortField.STRING,false);
			s.setSort(new SortField[] {sf,sf1});
			
			//Query 的Field 和  Sort 的 Field 相互独立
			
			//此Filter非Lucene分析中的过滤器
			Hits hits = is.search(tq, new AdvancedSecurityFilter1(), s);
			
			for(int i=0;i<hits.length();i++){
				System.out.print(hits.doc(i).get("bk")+"\t\t");
				System.out.println(hits.score(i));
				System.out.println(is.explain(tq, hits.id(i)).toString());
			}
			
		} catch (CorruptIndexException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}



public class AdvancedSecurityFilter extends Filter {

	@Override
	public BitSet bits(IndexReader reader) throws IOException {
		
		
		final BitSet bs = new BitSet(reader.maxDoc());
		//默认为true
		bs.set(0, bs.size()-1);
		//代表最高级别??
		Term t = new Term("id", "id2");
		TermDocs td = reader.termDocs(t);
		
		while(td.next()){
			bs.set(td.doc(), false);
		}
			
		return bs;
	}

	
}

public class AdvancedSecurityFilter1 extends Filter {

	@Override
	public BitSet bits(IndexReader reader) throws IOException {
		
		
		final BitSet bs = new BitSet(reader.maxDoc());
		//默认为true
		bs.set(0, bs.size()-1);
		//代表最高级别??
		Term t = new Term("id", "id2");
		
		//使用IndexReader的reader方法并不是对每个情况都适用
		//使用IndexSearcher 更能随心所欲的定制过滤的Filed 及 Instance
		//并且这种方法封装了底层的API 更为简洁和清晰
		IndexSearcher is = new IndexSearcher(reader);
		Hits hits = is.search(new TermQuery(t));
		
		for(int i=0;i<hits.length();i++){
			bs.set(hits.id(i), false);
		}
			
		return bs;
	}

	
}
 
分享到:
评论

相关推荐

    解密搜索引擎技术实战Lucene&Java精华版(第3版)源码(4)-补第6章

    解密搜索引擎技术实战Lucene&Java精华版(第3版)源码 书名:解密搜索引擎技术实战Lucene&Java精华版(第3版) 作者:罗刚 等编著 出版社:电子工业出版社 关键词:Lucene solr 搜索引擎 Lucene实战 随书源码 本书随...

    解密搜索引擎技术实战Lucene&Java精华版(2)

    解密搜索引擎技术实战Lucene&Java精华版(第3版)源码 书名:解密搜索引擎技术实战Lucene&Java精华版(第3版) 作者:罗刚 等编著 出版社:电子工业出版社 关键词:Lucene solr 搜索引擎 Lucene实战 随书源码 本书随...

    Lucene 3.5&API,最新版

    4. **Filter 和 QueryWrapperFilter**:这些过滤器可以限制搜索结果,例如,只返回指定范围内的文档。 5. **分词器和字符过滤器**:自定义分词器和字符过滤器允许开发者根据需求定制文本分析过程。 ### 四、API ...

    lucene src&bin 2.4.1

    《Apache Lucene 2.4.1:源码与二进制版本详解》 Apache Lucene,一个由Apache软件基金会开发的开源全文搜索引擎库,以其高效、可扩展性及灵活性在IT领域广受赞誉。本资源包含Lucene的2.4.1版本,包括源码(src)和...

    解密搜索引擎技术实战Lucene&Java精华版(第3版)源码

    解密搜索引擎技术实战Lucene&Java精华版(第3版)源码 书名:解密搜索引擎技术实战Lucene&Java精华版(第3版) 作者:罗刚 等编著 出版社:电子工业出版社 关键词:Lucene solr 搜索引擎 Lucene实战 随书源码 本书随...

    解密搜索引擎技术实战Lucene&Java精华版(5)

    解密搜索引擎技术实战Lucene&Java精华版(第3版)源码 书名:解密搜索引擎技术实战Lucene&Java精华版(第3版) 作者:罗刚 等编著 出版社:电子工业出版社 关键词:Lucene solr 搜索引擎 Lucene实战 随书源码 本书随...

    解密搜索引擎技术实战Lucene&Java精华版(第3版)源码(6)-libp2

    解密搜索引擎技术实战Lucene&Java精华版(第3版)源码 书名:解密搜索引擎技术实战Lucene&Java精华版(第3版) 作者:罗刚 等编著 出版社:电子工业出版社 关键词:Lucene solr 搜索引擎 Lucene实战 随书源码 本书随...

    解密搜索引擎技术实战Lucene&Java精华版(第3版)源码(3)-补第5章p2

    解密搜索引擎技术实战Lucene&Java精华版(第3版)源码 书名:解密搜索引擎技术实战Lucene&Java精华版(第3版) 作者:罗刚 等编著 出版社:电子工业出版社 关键词:Lucene solr 搜索引擎 Lucene实战 随书源码 本书随...

    解密搜索引擎技术实战++Lucene&amp;Java;精华版_.pdf

    《解密搜索引擎技术实战——Lucene&Java精华版》是一本深入探讨搜索引擎技术的专业书籍,主要聚焦于开源全文搜索引擎库Lucene以及与之配合的Java编程语言。这本书旨在帮助读者理解搜索引擎的工作原理,并通过实际...

    lucene&solr原理分析

    lucene&solr原理分析,lucene搜索引擎和solr搜索服务器原理分析。

    解密搜索引擎技术实战 LUCENE & JAVA(第3版)PDF

    《解密搜索引擎技术实战 LUCENE & JAVA(第3版)》是一本深入探讨搜索引擎技术的专业书籍,由罗刚撰写。这本书主要聚焦于LUCENE和JAVA这两种技术在搜索引擎开发中的应用,为读者揭示了搜索引擎背后的复杂机制和实现...

    Lucene5学习之排序-Sort

    “Lucene5学习之排序-Sort”这个标题表明了我们要探讨的是关于Apache Lucene 5版本中的排序功能。Lucene是一个高性能、全文检索库,它提供了强大的文本搜索能力。在这个主题中,我们将深入理解如何在Lucene 5中对...

    Lucene5学习之Filter过滤器

    在实际应用中,Filter还可以与其他组件结合使用,如Sort(排序)和Highlight(高亮),以提供更丰富的搜索体验。例如,我们可以先使用Filter筛选出满足条件的文档,再根据某个字段进行排序,最后对高亮显示匹配的...

    解密搜索引擎技术实战-Lucene&java;精华版

    《解密搜索引擎技术实战——Lucene&Java;精华版(第3版)》是猎兔搜索开发团队的软件研发和教学实践的经验汇总。《解密搜索引擎技术实战——Lucene&Java;精华版(第3版)》总结搜索引擎相关理论与实际解决方案,并给...

    全文搜索Lucene&ElasticSearch-新版.doc

    【全文搜索Lucene & ElasticSearch】是一门关于安装和入门的课程,主要涵盖了全文检索的基本概念,Lucene和ElasticSearch的介绍,以及如何使用Java操作ElasticSearch。全文检索,顾名思义,是对非结构化数据进行搜索...

    Lucene&solr.zip

    Lucene和Solr是两个非常重要的开源搜索引擎工具,它们在大数据处理、信息检索以及网站全文搜索等领域发挥着至关重要的作用。本篇将详细阐述Lucene和Solr的基本概念、工作原理以及如何在实际应用中使用它们。 **1. ...

    lucene .NET4.0&盘古分词dll,demo,doc

    《深入理解Lucene.NET 4.0与盘古分词技术》 在信息化时代,文本检索和信息提取扮演着至关重要的角色。Lucene.NET 4.0作为一个强大的全文搜索引擎库,为开发者提供了高效的搜索功能。而盘古分词作为中文分词领域的...

    解密搜索引擎lucene & java

    在众多搜索引擎技术中,Apache Lucene是一个被广泛使用的开源全文检索库,而Java作为一门强大的编程语言,经常被用于实现各种复杂的搜索引擎功能。本文将深入探讨解密搜索引擎中的关键技术,并特别关注Lucene与Java...

Global site tag (gtag.js) - Google Analytics