lucene基本概念

lucene是一个基于java的全文搜索工具包,实现了为应用提供索引和搜索功能。目前很多应用的搜索均基于lucene实现。
lucene可以为文本类型的数据建立索引,而不限制数据来源,可以是来自文件、db等任何数据存储的地方。lucene采用的是反向索引机制。
在lucene为你传给他的文本类型数据简历索引之后,索引会保存在磁盘或内存中,此时再使用查询条件进行查询就可以了。
使用过程:
存储数据文档–>对文档分词并建立索引–>输入关键词–>对关键词分词–>在已经创建的索引中进行查找–>返回与关键词相关的文档
这里写图片描述

lucene提供的几个基础类:
Document 是用来描述文档的,这里可以理解为一条记录

Field 是用来描述一个文档中的某个属性,这里可以理解为一条记录的某个字段

Analyzer 在对一个文档建立索引之前,需要通过Analyzer进行分词,然后把分词结果交给IndexWriter创建索引。(中文分词采用IK分词器,下载地址

IndexWriter 创建索引的核心类,它负责将所有Document对象加到索引中来

Directory
这代表Lucened索引存储位置(FSDirectory:存储硬盘中的索引位置;RAMDirectory,存储在内存中的索引位置)

添加索引的示例代码:

public static void index(){
        //创建Directory(索引存放位置)
        Directory directory = directory = FSDirectory.open(new File("D:\\Documents\\hellolucene\\index02"));
        IndexWriter writer = null;
        try {
        //创建IndexWriter对象 所需参数:索引位置、指定配置、指定分词类
            writer = new IndexWriter(directory,new IndexWriterConfig(Version.LUCENE_35,new StandardAnalyzer(Version.LUCENE_35)));
            writer.deleteAll();
            Document doc = null;
            for (int i = 0; i < ids.length; i++) {
                doc = new Document();
                doc.add(new Field("id",ids[i],Field.Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS));
                doc.add(new Field("email",emails[i],Field.Store.YES,Field.Index.NOT_ANALYZED_NO_NORMS));
                doc.add(new Field("content",contents[i],Field.Store.NO,Field.Index.ANALYZED));
                doc.add(new Field("name",names[i], Field.Store.YES,Field.Index.NOT_ANALYZED_NO_NORMS));
                //添加文档
                writer.addDocument(doc);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

在索引建立完成之后,通过IndexSearcher, Term, Query, TermQuery, Hits等lucene提供的基础类即可完成搜索操作了

猜你喜欢

转载自blog.csdn.net/yuruixin_china/article/details/80037483