Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Lucene实践

Avatar for cxfksword cxfksword
February 09, 2013

 Lucene实践

Lucene实践

Avatar for cxfksword

cxfksword

February 09, 2013
Tweet

More Decks by cxfksword

Other Decks in Technology

Transcript

  1. 目录 Lucene简介  Lucene.Net简介  开源项目和应用案例 Lucene基础  Lucene全文搜索处理流程 

    建立索引  查询索引 Lucene在布啦中的实践  旧布啦搜索存在的问题  新搜索方案  分词组件选择  近实时搜索
  2. 目录 Lucene简介  Lucene.Net简介  开源项目和应用案例 Lucene基础  Lucene全文搜索处理流程 

    建立索引  查询索引 Lucene在布啦中的实践  旧布啦搜索存在的问题  新搜索方案  分词组件选择  近实时搜索
  3. 开源项目和应用案例 • Solr – 面向企业基于Lucene的全文搜索方案,支持pdf、 word等文档内容搜索 • indextank-engine – Linkedin收购IndexTank公司后开源的全文搜索项目,

    支持实时,自动完成和一个推荐相关的特性 • StackOverflow – 全球最大的编程问答站点,基于lucene.net的全文 搜索成功案例
  4. 目录 Lucene简介  Lucene.Net简介  开源项目和应用案例 Lucene基础  Lucene全文搜索处理流程 

    建立索引  查询索引 Lucene在布啦中的实践  旧布啦搜索存在的问题  新搜索方案  分词组件选择  近实时搜索
  5. 建立索引 static void Main(string[] args) { var ramDir = new

    RAMDirectory(); //内存存储 var analyzer = new SimpleAnalyzer(); //分析器 var writer = new IndexWriter(ramDir, analyzer, true); //创建 IndexWrite类 //加入文档 var document = new Document(); document.Add(new Field("title", "建立索引测试 ", Field.Store.YES, Field.Index.ANALYZED)); document.Add(new Field("content", "测试 demo", Field.Store.NO, Field.Index.ANALYZED)); writer.AddDocument(document); //关闭IndexWrite writer.Close(); }
  6. 索引存储方式的差别 • RAMDirectory – 把所有内容保存到内存中 • SimpleFSDirectory – 保存到磁盘中,并发读使用lock来实现,并发性能不好 •

    NIOFSDirectory – 保存到磁盘中,不用使用lock就能支持多线程读,不支 持windows • MMapDirectory – 通过内存映射(memory-mapped)来访问索引文件,不用 使用lock支持多线程读,映射索引需要同等大小的内存, 因为内存碎片的原因很容易导致OutOfMemory异常
  7. 查询索引 static void Main(string[] args) { var ramDir = new

    RAMDirectory(); //这里假设是之前写入内容的内存对象 var analyzer = new SimpleAnalyzer(); //分析器 IndexReader reader = IndexReader.Open(ramDir); IndexSearcher searcher = new IndexSearcher(reader); //创建IndexSearcher QueryParser parser = new QueryParser(Version.LUCENE_29, "title", analyzer); Query query = parser.Parse("测试"); Hits hits = searcher.Search(query); //搜索 //输出结果 for (int i = 0; i < hits.Length(); i++) { Document doc = hits.Doc(i); Console.WriteLine(string.Format("title:{0}", doc.Get("title"))); } //关闭搜索 searcher.Close();
  8. 目录 Lucene简介  Lucene.Net简介  开源项目和应用案例 Lucene基础  Lucene全文搜索处理流程 

    建立索引  查询索引 Lucene在布啦中的实践  旧布啦搜索存在的问题  新搜索方案  分词组件选择  近实时搜索
  9. 分词组件性能测试 方案组合 分词效率 星级 说明 盘古分词 +Lucene.Net 2.9.2 400KB/s ★★

    比较慢 IKVM+IKAnalyzer+L ucene 3.5.0(.net版) 1305KB/s ★★★★ 速度不错 IKAnalyzer.Net+Luc ene 2.9.2(.net版) 1305KB/s ★★★★ 速度不错,但竟然 和使用IKVM一 样。。。 IKAnalyzer+Lucene 3.5.0(JAVA版) 1700KB/s ★★★★★ 非常快