Lucene 全文检索 Lucene的使用
Lucene 全文检索 Lucene的使用
一.简介:
参考百度百科:
http://baike.baidu.com/link?url=eBcEVuUL3TbUivRvtgRnMr1s44nTE70odpjF8VbUpg8z3o8u1mt2PLpP-WnLBZY7ifUNLHDUtKSAQDthiiIhIa
二.使用:
1.必备包:
lucene有7个包需要导入:analysis,document,index,queryParser,search,store,util
2.建立索引:
主要使用类:IndexWriter
主要使用函数:writer.AddDocument(doc);
IndexWriter writer = new IndexWriter("E:/index", new StandardAnalyze(),true,MaxFieldLength.UNLIMITED); //true代表覆盖原先数据,maxFieldLength用来限制Field的大小 Document doc = new Document(); doc.add(new Field("title", "lucene introduction", Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS)); doc.add(new Field("time", "60", Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS)); writer.addDocument(doc); writer.optimize(); //优化 writer.close();
3.检索:
主要类:IndexSearcher
主要函数:searcher.search(query);
IndexSearcher searcher= new IndexSearcher("E:/index"); Query query = new TermQuery(new Term("title", "lucene"));//单个字节查询 //Query query = new FuzzyQuery(new Term("title", "lucene"));//模糊查询 //Query query = new WildcardQuery(new Term("title", "lu*"));//通配符查询 ?代表一个字符,*代表0到多个字符 //BooleanQuery query = new BooleanQuery();//条件查询 //BooleanQuery qson1 = new BooleanQuery(); //Query q1 = new TermQuery(new Term("title", "lucene")); //qson1.add(q1, Occur.MUST);//MUST是必须满足的 //BooleanQuery qson2 = new BooleanQuery(); //Query q2= new TermQuery(new Term("sex", "woman")); //qson2 .add(q2, Occur.MUST_NOT);//MUST_NOT是必须不满足 //query.add(qson1, Occur.SHOULD); //query.add(qson2, Occur.SHOULD);//SHOULD代表满足qson1或者满足qson2都可以 //PhraseQuery query = new PhraseQuery();//近距离查询 //query.setSlop(5);//距离设置为5 //query.add(new Term("title", "lucene")); //query.add(new Term("title", "introduction"));//查询出title中lucene和introduction距离不超过5个字符的结果 //Query query = new PrefixQuery(new Term("title", "lu"));//WildcardQuery的lu*一样 //RangeQuery query = new RangeQuery(new Term("time", "50"),new Term("time", "60"), true); //true代表[50,60],false代表(50,60) Hits hits = searcher.search(query); for (int i = 0; i < hits.length(); i++) { Document d = hits.doc(i); String title= d.get("title"); System.out.print(title+ " "); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构