zoukankan      html  css  js  c++  java
  • Lucene原理之概念

    概念:

        数据分两种:

          1、结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。
          2、非结构化数据:指不定长或无固定格式的数据,如邮件,word文档等。(半结构化数据:如XML,HTML等,当根据需要可按结构化数据来处理,也可抽取出纯文本按非结构化数据来处理)

        非结构化数据又一种叫法叫全文数据。因此:全文索引就是非结构化的数据索引。Lucene就是全文索引库。

         全文检索大体分两个过程,索引创建 (Indexing) 和搜索索引 (Search) 。
        索引创建:将现实世界中所有的结构化和非结构化数据提取信息,创建索引的过程。
        搜索索引:就是得到用户的查询请求,搜索创建的索引,然后返回结果的过程。
        于是全文检索就存在三个重要问题:
          1. 索引里面究竟存些什么?(Index)
          2. 如何创建索引?(Indexing)
          3. 如何对索引进行搜索?(Search)

    一、索引结构:  

      索引由字典+倒排表组成。
        字典:就是我们需要搜索的词。
        倒排表:建立了字典和文档的映射。(每个字符串都指向包含本身的文档链表)

      图:

        

      

       排序(平分):

        df:Document Frequency 即文档频次,表示总共有多少文件包含此词(Term)。
        tf:Term Frequency 即词频率,表示此文件中包含了几个此词(Term)。

    二、创建索引: 

      创建索引的步骤:

        1、需要索引的文档。
        2、将文档分词(Tokenizer)
          分词的需要做的事情:
          1)、去除标点。
          2)、去除停词(所谓停词就是一种语言中最普通的一些单词,由于没有特别的意义,因而大多数情况下不能成为搜索的关键词,因而创建索引时,这种词会被去掉而减少索引的大小)。
          3)、分词得到词元(字典)。
        3、将词元(Token)传递给语言处理组件(Linguistic Processor)。
          对于英语,语言处理组件(Linguistic Processor) 一般做以下几点:
          1)、变为小写(Lowercase) 。
          2)、将单词缩减为词根形式,如“cars ”到“car ”等。这种操作称为:stemming 。
          3)、将单词转变为词根形式,如“drove ”到“drive ”等。这种操作称为:lemmatization(词型还原) 。
        4、将得到的词(Term)传给索引组件(Indexer)。
          索引组件(Indexer)主要做以下几件事情:
          1)、利用得到的词(Term)创建一个字典。
          2)、对字典按字母顺序进行排序。
          3)、合并相同的词(Term) 成为文档倒排(Posting List) 链表。

    三、搜索索引:

       搜索的步骤:   

        1、用户输入查询语句。举个例子,用户输入语句:lucene AND learned NOT hadoop。
        2、对查询语句进行词法分析,语法分析,及语言处理。
          1)、词法分析主要用来识别单词和关键字。
          2)、语法分析主要是根据查询语句的语法规则来形成一棵语法树。
          3)、语言处理同索引过程中的语言处理几乎相同。
        3、搜索索引,得到符合语法树的文档。
          此步骤有分几小步:
          1)、首先,在反向索引表中,分别找出包含lucene,learn,hadoop的文档链表。
          2)、其次,对包含lucene,learn的链表进行合并操作,得到既包含lucene又包含learn的文档链表。
          3)、然后,将此链表与hadoop的文档链表进行差操作,去除包含hadoop的文档,从而得到既包含lucene又包含learn而且不包含hadoop的文档链表。
          4)、最后,此文档链表就是我们要找的文档。
        4、根据得到的文档和查询语句的相关性,对结果进行排序。
          Term Frequency (tf):即此Term在此文档中出现了多少次。tf 越大说明越重要。
          Document Frequency (df):即有多少文档包含次Term。df 越大说明越不重要。

     ref:

      https://www.cnblogs.com/forfuture1978/category/300665.html

  • 相关阅读:
    Docker 文档编译
    Docker CentOS 安装方法
    Docker CentOS 安装要求
    Docsify 的文档页面标题在那里设置
    Docsify 的 GitHub 链接在那里设置的
    GitHub 中如何启用 GitHub Pages 中的子域名
    Spring API 的 CORS 测试 提示错误 Reason: header ‘authorization’ is not allowed
    Spring API 的 CORS 测试
    CentOS 7 安装 JDK 11
    Postman API 获得文件如何保存
  • 原文地址:https://www.cnblogs.com/chen--biao/p/9626767.html
Copyright © 2011-2022 走看看