欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于Lucene的理解和使用

程序员文章站 2022-07-09 11:51:35
...

什么时lucene?

Lucene是简单而功能强大的基于Java的搜索库。它可以用于任何应用程序来搜索功能。 Lucene是开源项目。它是可扩展的,高性能的库用于索引和搜索几乎任何类型的文本。Lucene库提供了所需的任何搜索应用程序的核心业务。索引和搜索。简单来说就是将需要搜索的类容通过lucene创建索引库,搜索的时候去索引库里面查找。

什么叫做全文检索?

我们生活中的数据总体分为两种:一种为结构化数据,指具有固定格式或者限长的数据,比如数据库等,这种的检索很简单可以根据条件来查找,第二种为非结构化数据,指没有固定格式的数据,比如文档,word等对非结构化的数据进行检索就是全文检索。

全文检索又分两种方法:第一顺序扫描法,就是挨个找,找到需要的数据,直到全部找完。第二种就是全文检索,将没有规则的数据中的部分信息提取出来,重新组织,成为有结构的数据,然后再进行查询,提取出来的数据就称之为索引。
例子:字典,字典的拼音表和部首检字表就相当于字典的索引。

使用Lucene进行全文检索的操作

全文检索分为两个部分:

1:创建索引
2:搜索索引

如何创建索引:

1:获取需要创建索引的文档
2:将文档传给分词器
3:分词器进行分词处理
4:利用得到的词创建字典,进行排序,合并相同的词,形成倒排链表

如何对索引进行搜索

1:输入查询语句
2:对查询语句进行词法分析(获取查询语句中需要的类容)
3:分词处理
4:搜索索引,在索引表中找到关键词的文档链表,将相同的合并,形成新的文档链表
5:根据文档和查询语句的相关性对结果进行排序(计算权重和判断相关性)
6:返回结果集

Lucene简单入门

pom.xml 添加依赖

<dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-core</artifactId>
            <version>4.6.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-analyzers-common</artifactId>
            <version>4.6.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-queryparser</artifactId>
            <version>4.6.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-codecs</artifactId>
            <version>4.6.1</version>
        </dependency>

创建索引

 // 索引存放目录
    public static final String INDEX_DIR = "E:\\index_dir1";

    public void createIndex() throws IOException {
        //索引写入位置
        Directory index = FSDirectory.open(new File(INDEX_DIR));
        //分词器
        Analyzer analyzer = new StandardAnalyzer();  //可以配置不同的分析器
        IndexWriterConfig config = new IndexWriterConfig(Version.LATEST,analyzer);
        //索引写入器
        IndexWriter indexWriter = new IndexWriter(index,config);
        //文档写入
        Document doc = new Document();
        doc.add(new StringField("title","Lucene in Action",Field.Store.YES));
        doc.add(new StringField("content","学习lucene的使用",Field.Store.YES));
        indexWriter.addDocument(doc);
        //关闭索引写入
        indexWriter.close();
    }

    public void search() throws Exception {
        String keyWord = "Lucene";
        //查询器
        Query query = new QueryParser("title",new StandardAnalyzer()).parse(keyWord);
        //打开索引文件
        Directory writer = FSDirectory.open(new File(INDEX_DIR));
        IndexReader reader = DirectoryReader.open(writer);
        IndexSearcher searcher = new IndexSearcher(reader);
        TopDocs topDocs = searcher.search(query,100);
        System.out.println("查询总数:"+topDocs.totalHits);
    }

上一篇: lucene2.9学习第一天

下一篇: 2.9