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版)源码 书名:解密搜索引擎技术实战Lucene&Java精华版(第3版) 作者:罗刚 等编著 出版社:电子工业出版社 关键词:Lucene solr 搜索引擎 Lucene实战 随书源码 本书随...
解密搜索引擎技术实战Lucene&Java精华版(第3版)源码 书名:解密搜索引擎技术实战Lucene&Java精华版(第3版) 作者:罗刚 等编著 出版社:电子工业出版社 关键词:Lucene solr 搜索引擎 Lucene实战 随书源码 本书随...
4. **Filter 和 QueryWrapperFilter**:这些过滤器可以限制搜索结果,例如,只返回指定范围内的文档。 5. **分词器和字符过滤器**:自定义分词器和字符过滤器允许开发者根据需求定制文本分析过程。 ### 四、API ...
《Apache Lucene 2.4.1:源码与二进制版本详解》 Apache Lucene,一个由Apache软件基金会开发的开源全文搜索引擎库,以其高效、可扩展性及灵活性在IT领域广受赞誉。本资源包含Lucene的2.4.1版本,包括源码(src)和...
解密搜索引擎技术实战Lucene&Java精华版(第3版)源码 书名:解密搜索引擎技术实战Lucene&Java精华版(第3版) 作者:罗刚 等编著 出版社:电子工业出版社 关键词:Lucene solr 搜索引擎 Lucene实战 随书源码 本书随...
解密搜索引擎技术实战Lucene&Java精华版(第3版)源码 书名:解密搜索引擎技术实战Lucene&Java精华版(第3版) 作者:罗刚 等编著 出版社:电子工业出版社 关键词:Lucene solr 搜索引擎 Lucene实战 随书源码 本书随...
解密搜索引擎技术实战Lucene&Java精华版(第3版)源码 书名:解密搜索引擎技术实战Lucene&Java精华版(第3版) 作者:罗刚 等编著 出版社:电子工业出版社 关键词:Lucene solr 搜索引擎 Lucene实战 随书源码 本书随...
解密搜索引擎技术实战Lucene&Java精华版(第3版)源码 书名:解密搜索引擎技术实战Lucene&Java精华版(第3版) 作者:罗刚 等编著 出版社:电子工业出版社 关键词:Lucene solr 搜索引擎 Lucene实战 随书源码 本书随...
《解密搜索引擎技术实战——Lucene&Java精华版》是一本深入探讨搜索引擎技术的专业书籍,主要聚焦于开源全文搜索引擎库Lucene以及与之配合的Java编程语言。这本书旨在帮助读者理解搜索引擎的工作原理,并通过实际...
lucene&solr原理分析,lucene搜索引擎和solr搜索服务器原理分析。
《解密搜索引擎技术实战 LUCENE & JAVA(第3版)》是一本深入探讨搜索引擎技术的专业书籍,由罗刚撰写。这本书主要聚焦于LUCENE和JAVA这两种技术在搜索引擎开发中的应用,为读者揭示了搜索引擎背后的复杂机制和实现...
“Lucene5学习之排序-Sort”这个标题表明了我们要探讨的是关于Apache Lucene 5版本中的排序功能。Lucene是一个高性能、全文检索库,它提供了强大的文本搜索能力。在这个主题中,我们将深入理解如何在Lucene 5中对...
在实际应用中,Filter还可以与其他组件结合使用,如Sort(排序)和Highlight(高亮),以提供更丰富的搜索体验。例如,我们可以先使用Filter筛选出满足条件的文档,再根据某个字段进行排序,最后对高亮显示匹配的...
《解密搜索引擎技术实战——Lucene&Java;精华版(第3版)》是猎兔搜索开发团队的软件研发和教学实践的经验汇总。《解密搜索引擎技术实战——Lucene&Java;精华版(第3版)》总结搜索引擎相关理论与实际解决方案,并给...
【全文搜索Lucene & ElasticSearch】是一门关于安装和入门的课程,主要涵盖了全文检索的基本概念,Lucene和ElasticSearch的介绍,以及如何使用Java操作ElasticSearch。全文检索,顾名思义,是对非结构化数据进行搜索...
Lucene和Solr是两个非常重要的开源搜索引擎工具,它们在大数据处理、信息检索以及网站全文搜索等领域发挥着至关重要的作用。本篇将详细阐述Lucene和Solr的基本概念、工作原理以及如何在实际应用中使用它们。 **1. ...
《深入理解Lucene.NET 4.0与盘古分词技术》 在信息化时代,文本检索和信息提取扮演着至关重要的角色。Lucene.NET 4.0作为一个强大的全文搜索引擎库,为开发者提供了高效的搜索功能。而盘古分词作为中文分词领域的...
在众多搜索引擎技术中,Apache Lucene是一个被广泛使用的开源全文检索库,而Java作为一门强大的编程语言,经常被用于实现各种复杂的搜索引擎功能。本文将深入探讨解密搜索引擎中的关键技术,并特别关注Lucene与Java...