zoukankan      html  css  js  c++  java
  • Lucene

    全文检索就是从非结构化数据中提取部分信息形成索引,再对索引进行查询。对于数据量大,结构不稳定的数据,要使用全文检索比如字典

    Lucene是一个开源的全文检索引擎工具包,提供了查询引擎和索引引擎

    Lucene实现全文检索(创建索引和搜索两个过程)的流程:

    索引过程:对原始内容进行索引构建成一个索引库,过程就是确定要搜索的原始内容(指要索引和搜索的内容),然后采集文档,构建文档,分析文档,形成索引文档。

    搜索过程:从索引库中搜索内容,过程就是用户通过查询界面,输入要查询的信息,然后创建查询,执行搜索,从索引库中查询后渲染搜索结果返回给用户。

    构建文档:

    把每一个文件当做一个document(文档),文档中有域的概念相当于数据库中的字段,每个文档可以有多个域,不同的文档可以有不同的域,同一个文档可以有相同的域,每个文档都有一个唯一的编号,就是文档id

    分析文档:

    主要就是对域中的内容进行分析,比如提取单词,大写转小写,去标点等生成最终的语汇单元(可以理解为一个一个的单词),每个单词叫做一个term(就是key,value类型的,包含两部分,一部分是文档的域名,一部分是单词的内容),不同域中分析出来的相同的单词是不同的term。

    比如现在有一个文档spring.txt,文档内容为这一句话:Lucene is a Spring Framework provides.  

    对这个文档进行分析,首先经过提取单词,大写转小写,去标点,以及去除一些没有具体语义的词,得到‘lucene’,'spring','framework','provides'这些单词组成了多个term,term:file_content   lucene,term:file_content  spring,term:file_content  framework,term:file_content  provides,term:file_name  spring,这个文件组成了5个term,这5个term将作为索引保存到索引库中,

    创建索引:

    创建出来的索引放到索引库中,首先要知道,在索引库中有两部分组成,一部分是term,两一部分是文档,就是一个字典,有目录也有目录对应的内容。过程是这样的,把从文档中分析出来的term和文档对应放入索引库,在term中,含有对应文档的编号,如果多个文档中有相同的term,这时候这个term中就有多个文档的编号,逐步把所有的term放入索引库中。我们是根据索引找文档,这种索引的结构是倒排索引结构。传统的索引是根据文件查找文件内容,然后在文件中匹配相应的关键词,这种是顺序扫描方法,数据量大的时候,会很慢。

    倒排索引结构也叫反向索引结构,包括索引和文档两部分。

    搜索索引:

    步骤就是,首先创建Directory对象,就是索引库存放的位置,然后创建一个indexReader对象,然后获得indexSearcher对象,继续创建一个termQuery对象,指定查询的域和关键词,执行查询,返回的是一个数组,遍历出的是含有该关键词的文档编号,根据文档id去查询文档并返回文档,结束。

  • 相关阅读:
    KBMMW 4.80.00 发布
    RCF库ClientStub.setAutoReconnect
    编译 boost
    2017学习计划
    _beginthreadex注意事项
    push_back模式工作
    总结2016
    <转>好婚姻是彼此放心
    ProcessExplore 最新版
    网站seo新手快速提升自己的技巧
  • 原文地址:https://www.cnblogs.com/javatalk/p/10161715.html
Copyright © 2011-2022 走看看