Lucene极简入门

Lucene极简入门

1、为什么有Lucene
  • 1.1、数据量小的原始搜索:依靠SQL语句直接检索数据库
    在这里插入图片描述

  • 1.2、数据量巨大时应用Lucene方案:数据库就变成了索引库,我们使用Lucene的API的来操作服务器上的索引库。这样完全和数据库进行了隔离 。
    在这里插入图片描述

2、数据查询方法
  • 1、顺序扫描

    • 描述:带着关键字,一条一条的比较,逐字匹配,直到找到为止
    • 缺点:查询效率低(慢), 随着数据量的大量增长效率会明显降低
    • 优点: 准确率高
    • 举例:数据库中like查询
  • 2、倒排索引

    • 描述:把数据库中的所有内容都查询出来,然后进行切分词, 把切开分词组成索引(目录),把内容放到文档对象中,索引与文档组成索引库;检索时,先查询到索引,索引与文档之间有联系,通过联系可以快速确定文档的位置,返回文档,这就是倒排索引算法.

    • 通俗的说:
      1、在搜索引擎中,每个文档都有一个对应的文档 ID文档内容被表示为一系列关键词的集合。例如,文档 1 经过分词,提取了 20 个关键词,每个关键词都会记录它在文档中出现的次数和出现位置
      2、那么,倒排索引就是关键词到文档 ID 的映射,每个关键词都对应着一系列的文件,这些文件中都出现了关键词

    • 优点:查询效率高,不会随着数据的大量增长而效率明显降低

    • 举例:字典:把所有的字偏旁部首都取出来,组成目录,目录与后面的内容有联系, 通过目录能快速的找到字的详细
      在这里插入图片描述

3、Lucene的组成及索引库
  • Lucene中存的就是一系列的二进制压缩文件和一些控制文件,它们位于计算机的硬盘上, 这些内容统称为索引库

  • (1)原始记录

    • 存入到索引库中的原始文本,例如:我是张三
  • (2)词汇表

    • 按照一定的拆分策略(即分词器)将原始记录中的每个字符拆开后,存入一个供将来搜索的表。
    • 标准分词算法Lucene的标准分词算法,一个一个汉字进行拆分
  • Lucene存放数据的地方我们通常称之为索引库,索引库又分为两部分组成:原始记录和词汇表

  • 参考文章: https://juejin.im/post/5aaf21d46fb9a028b86dcf38#comment

4、Lucene查存过程:
  • 当我们想要把数据存到索引库的时候,我们首先存入的是将数据存到原始记录

  • 又由于我们给用户使用的时候,用户使用的是关键字来进行查询我们的具体记录。因此,我们需要把我们原始存进的数据进行拆分!将拆分出来的数据存进词汇表中

  • 词汇表就是类似于我们在学Oracle中的索引表,拆分的时候会给出对应的索引值。

  • 一旦用户根据关键字来进行搜索,那么程序就先去查询词汇表中有没有该关键字,如果有该关键字就定位到原始记录表中,将符合条件的原始记录返回给用户查看

  • 具体说明将JavaBean对象封装到Document对象中,然后通过IndexWriter把document写入到索引库中。当用户需要查询的时候,就使用IndexSearcher从索引库中读取数据,找到对应的Document对象,从而解析里边的内容,再封装到JavaBean对象中让我们使用

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值