Lucene学习笔记

1. Lucene:它一个全世界最流行的,开源的全文检索框架。

2. 我们用Lucene做什么:

   网上商城:按产品的名称,产品的描述进行搜索。
     oa: 公文管理, 搜索"放假" 关键字。
 
3. Lucene主要用站内检索,网站内的检索。

4. 单独的Lucene是做了互联网的搜索引擎,因为还需要"网络蜘蛛"、【海量数据】管理。
   网络蜘蛛: 负责所有的网站、所有网页之间的"爬动", 它会把爬到的信息存储到数据库中。

5. 什么是全文检索:根据你检索的要求,在文档中检索。


一、Lucene的安装:

 1. core: 核心部分.
 2. analysis: 分词部分。
 3. highlighter: 高亮部分。
 4. queryparser: 查询。
 5. docs: api部分。

二、创建索引库。

    创建索引库的步骤:

    1. 创建IndexWriter对象
       IndexWriter indexWriter = new IndexWriter(directory, indexWriterConfig);
       第一参数(directory): 指定索引库存储的位置
           Directory它的子类:
             FSDirectory : 存放在磁盘上.
         RAMDirectory : 内存中.
           第二个参数(indexWriterConfig):指定创建索引需要的额外的信息。
            indexWriterConfig config = new IndexWriterConfig(version|版本, analyzer|分词器);
        config.setOpenMode(CREATE| APPEND | CREARE_OR_APPEND);
    2. 调用indexWriter添加文档:
       // 循环添加Document
       Document doc = new Document();
       doc.add(Field);
       indexWriter.addDocument(Document);
       
       indexWriter.commit(); //提交
       indexWriter.close(); // 关闭

    常用的API:
     a. IndexWriter : 对索引库CUD操作
     b. Directory : 目录
        -- FSDirectory (文件目录)
       --  NIOFSDirectory
       --  SimpleFSDirectory
       静态的方法:FSDirectory.open(file);

    -- RAMDirectory
       查询索引时用这个效率会高些。
       
     c. IndexWriterConfig : 创建索引额外的信息
         方法setOpenMode(): 指定打开索引库的模式。
     -- OpenMode.CREATE : 创建
     -- OpenMode.APPEND :  追加
     -- OpenMode.CREATE_OR_APPEND : 创建或追加

     d. Analyzer : 分词器
    
     e. Document : 文档

     f. Field :  字段
        常用到得子类
        -- DoubleField
    -- FloatField
    -- IntField
    -- LongField
    -- StoredField (只存储,不分词,也不索引)
    -- StringField 不分词(主键)
    -- TextField
    new Field("字段名称", "字段值", "是否存储")
    Store.YES : 存储
    Store.NO: 不存储

三、查询|检索。

    操作步骤:
    1. 创建IndexSearcher
       // 索引库存储的目录
       Directory directory = FSDirectory.open(new File("F:/lucene_index"));
       IndexReader indexReader = DirectoryReader.open(directory);
    
       IndexSearcher searcher = new IndexSearcher(indexReader);

        2. 调用IndexSearcher方法进行检索
           Query query = new TermQuery(new Term("field", "keyword"));
       TopDocs topDocs = indexSearcher.search(query, "记录条数");
       
       topDocs.totalHits : 检索到的总条数
       topDocs.scoreDocs : 检索到的文档数组.
        3. 迭代ScoreDoc[]数组

       int docId = scoreDoc.doc; // 文档的编号
       Document doc = searcher.doc(docId);
       doc.get("字段名")


    常用API:
     a. IndexSearcher : 搜索对象
        -- search(query, num)
       query: Query的子类
       num : 查询的记录条数。

    -- doc(docId): 获取文档

     b. IndexReader : 读索引库的对象
     c. DirectoryReader : 目录读取对象
        -- DirectoryReader.open(directory)

     d. TopDocs
        -- totalHits : 检索到的总条数
    -- scoreDocs : 检索到的文档数组.

     e. ScoreDoc
        -- doc : 文档的编号
    

四、分词处理.
  1. 英文分词按空格分成若干个单词: i love you
  2. 中文分词(Lucene自带的分词器):
     a. 单字分词(StandardAnalyzer): 中华人民共和国 (中|华|人|民|共|和|国 )
     b. 二分法分词(CJKAnalyzer): 中华人民共和国 (中华|华人|人民|民共|共和|和国)
     c. 词库分词(SmartChineseAnalyzer):需要宠大的词库。(这个比较好用)
  3. 去掉停用词: (stop word)
     is、a、an、the、of、for、的、地、吗、得、嘛、哦、了、呢.
  4. 英文大写全部小写。
  5. 英文还原词根: cars : car
  6. 加停用词。

  7. 第三方的开源的分词器.
     a. ik-analyzer
     b. mmseg4j
     

五、对索相库进行维护(CRUD)

   indexWriter : CUD操作
     -- indexWriter.addDocument(); // 添加
     -- indexWriter.updateDocument(term, doc); // 修改
     -- indexWriter.deleteDocuments(term); // 删除
    
   indexReader : 对索引库做查询操作
     -- numDocs()| maxDoc() : 获取总文档数
     Document doc = indexReader.document(i); // 根据索引号获取文档.

   indexSearcher: 对索引库做搜索操作


六、Query创建的方式
    1. 第一种创建Query的方式 (Query的子类)
        TermQuery : 关键字查询
    WildcardQuery : 通匹符查询
    PrefixQuery : 前缀查询
    FuzzyQuery :  模糊查询
    RegexpQuery : 正则表达式查询
    BooleanQuery : 布尔查询
    PhraseQuery : 短语查询 (添加的关键字是并且关系)

    MultiPhraseQuery : 多短语查询 (添加的数组中关键字是或者关系)
    MultiPhraseQuery ph = new MultiPhraseQuery();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值