zoukankan      html  css  js  c++  java
  • 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必须没有)

  • 相关阅读:
    hibernate_0100_HelloWorld
    MYSQL子查询的五种形式
    JSF是什么?它与Struts是什么关系?
    nop指令的作用
    htmlparser实现从网页上抓取数据(收集)
    The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the
    FCKeditor 在JSP上的完全安装
    Java遍历文件夹的2种方法
    充电电池和充电时间说明
    吃知了有什么好处
  • 原文地址:https://www.cnblogs.com/HKKD/p/luceneNet.html
Copyright © 2011-2022 走看看