美文网首页
Lucene的总体架构——基于Lucene7.0

Lucene的总体架构——基于Lucene7.0

作者: Mr韶先生 | 来源:发表于2017-11-07 15:08 被阅读222次
前言:根据Lucene7.0版本介绍Lucene相关知识

总体架构

在Lucene in action中,Lucene 的构架和过程如下图,


Lucene in action 中Lucene架构

根据Lucene架构图,lucene主要包含两个过程,建立索引以及搜索索引。

  • 建立索引
    使用Lucene时,将被搜索的内容包括文件、数据库、web数据等数据源转换成lucene的Document对象,存入系统文件或内存中,建立索引。
  • 搜索索引
    当用户搜索时,将用户搜索内容封装成Query对象,并通过search函数搜索Lucene索引,如果命中关键词,则返回命中的TopDocs对象

具体代码(Lucene7.0)

 public void buildIndex() {
        try {
            //索引建立过程
            //创建索引目录,RAMDirectory基于内存
            RAMDirectory directory = new RAMDirectory();
            //保存用于创建IndexWriter对象的所有配置;WhitespaceAnalyzer空白分词器,用于建立索引时的分词
            IndexWriterConfig config = new IndexWriterConfig(new WhitespaceAnalyzer());
            //创建IndexWriter用于建立索引
            IndexWriter indexWriter = new IndexWriter(directory, config);
            //Document索引的载体,每条索引信息对应一个document对象
            Document document = new Document();
            //Field对象相当于索引信息的某个属性,通过add()添加到document中,StringField的value作为一个整体,不能再被分词;第三个参数代表是否被存储
            document.add(new StringField("name", "seansherwood", Field.Store.YES));
            //TextField中的值需要被分词器分词
            document.add(new TextField("description", "like Android and Lucene", Field.Store.YES));
            //建立索引
            indexWriter.addDocument(document);
            //建立索引之后要将indexWriter对象commit方法,对于索引的增删改操作都需要进行commit;如果建立索引完成可以直接调用close,其默认调用了commit
            indexWriter.close();
            //搜索过程
            //IndexSearcher用于索引搜索,参数需要创建索引时的索引目录
            IndexSearcher searcher = new IndexSearcher(DirectoryReader.open(directory));
            //封装搜索查询语句
            Query query = new TermQuery(new Term("description", "Lucene"));
            //搜索返回命中的document的ID对象
            TopDocs hit = searcher.search(query, 10);
            System.out.println(hit.scoreDocs.length);
            //遍历拿到索引中的document
            for (int i = 0; i < hit.scoreDocs.length; i++) {
                Document doc = searcher.doc(hit.scoreDocs[i].doc);
                System.out.println("name:" + doc.get("name"));
                System.out.println("description:" + doc.get("description"));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

注:能力一般,水平有限,如有不当之处,请批评指正,定当虚心接受!

相关文章

  • Lucene的总体架构——基于Lucene7.0

    总体架构 在Lucene in action中,Lucene 的构架和过程如下图, 根据Lucene架构图,luc...

  • Lucene的核心包结构——基于Lucene7.0

    Lucene7.0包目录 Lucene7.0官方文档 解释 注:能力一般,水平有限,如有不当之处,请批评指正,定当...

  • [转]Lucene的总体架构

    原文链接# Lucene学习总结之二:Lucene的总体架构,这里做一些摘要并收藏。 Lucene总的来说是:一高...

  • 搜索引擎lucene(1):总体架构

    1、lucene的总体架构 1.1、lucene的特点 高效、可扩展的全文检索库; 仅支持纯文本的索引(Index...

  • Elasticsearch

    Elasticsearch 一.全文检索和Lucene Lucene基于java环境,基于Lucene之上包装一层...

  • Elasticsearch | Lucene概要

    核心要点:1、Lucene简介2、Lucene的优点3、文档自动解析流程4、Lucene架构5、Lucene的基本...

  • Tomcat源码解析-整体流程介绍

    一、架构 下面谈谈我对Tomcat架构的理解 总体架构: 1、面向组件架构 2、基于JMX 3、事件侦听 1)面向...

  • Elasticsearch原理学习

    elasticsearch基于全文检索引擎Lucene,Apache给出的官方定义:Lucene是高效的基于jav...

  • es(一)

    1.什么是全文检索和Lucene 基于java环境,基于Lucene之上包装一层外壳 Lucene是一个java...

  • 01-Elasticsearch简介

    lucene和elasticsearch的前世今生 lucene,最先进、功能最强大的搜索库,直接基于lucene...

网友评论

      本文标题:Lucene的总体架构——基于Lucene7.0

      本文链接:https://www.haomeiwen.com/subject/ogrfcxtx.html