• 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必须没有)

  • 相关阅读:
    js_未结束的字符串常量
    [转]关于项目管理的思考
    Nhibernate理解
    Visual Studio 2005常用插件搜罗
    基本概念
    resharper 2.0
    Nhibernate资源
    [转]关于项目管理的知识点
    style
    带分数 蓝桥杯
  • 原文地址:https://www.cnblogs.com/HKKD/p/luceneNet.html
Copyright © 2020-2023  润新知