LuceneNet 实现快速大文件大数据查询

做过站内搜索的朋友应该对Lucene.Net不陌生,因为用普通的sql  like查询肯定是不行的,太慢了。

首先说明的是--Lucene.Net只是一个全文检索开发包,不是一个成型的搜索引擎,

它的功能就是负责将文本数据按照某种分词算法进行切词,分词后的结果存储在索引库中,从索引库检索数据的速度灰常快.

 

下面我用这个技术做了一个demo。结构图如下

 

实现了 luceneNet 对数据库的快速检索。

 

重点类说明

Analyzer类:LuceneNet中分词算法的基类 任何自定义算法都需继承它

FSDirectory类: 指定索引库文件存放文件位置  是Directory的子类(它有两个子类 还有一个RAMDirecory,它用来指定将索引库文件存放在内存中)

IndexReader:对索引进行读取的类

     静态方法bool  IndexExists(Directory directory)--判断目录directory是否是一个索引目录

IndexWriter:对索引进行写的类

     静态方法bool  IsLocked(Directory directory)--判断目录是否锁定

     它在对索引目录写之前会把目录锁定,两个IndexWrite无法同时操作一个索引文件

     IndexWrite在进行写操作的时候会自动加锁

     Close自动解锁

     Unlock手动解锁(通常用在程序异常退出 IndexWrite还没来得及close)

Document类:要检索的文档 相当于一条记录

     Add(Field field)向文档中添加字段

Filed类:构造函数(字段名,字段值,是否存储原文,是否对该字段创建索引,存储索引词间距)

     是否存储原文:Field.Store.YES 存储原值(如显示原内容必须为YES) Field.Store.NO不存储原值 Field.Store.YES压缩存储

     是否创建索引:Field.Index.NOT_ANALYZED不创建索引 Field.Index.ANALYZED创建索引(利于检索)

IndexSearcher:搜索类 Searcher类的子类

     Search(查询条件Query,过滤条件Filter,检索见过存放容器Collector)

Query类:所有查询条件父类(子类都具有Add方法)

     子类PhraseQuery:多个关键词的拼接类 关键词间是且的关系

     query.Add(new Term("字段名", 关键词))

     query.Add(new Term("字段名2", 关键词2)) 
     类似于:where 字段名 contains 关键词 and 字段名2 contains 关键词2

     子类BooleanQuery:类似PharseQuery 通过它实现关键词间的或关系(MUST必须有 Should可有可无  MUST_NOT必须没有)

posted @ 2017-03-22 09:56  HK->胡康  阅读(546)  评论(0编辑  收藏  举报