Lucene的查询过程

简介: Lucene的查询过程

  在Lucene的查询过程中的主要检索方式有以下四种。

  1. 单个词查询

   指对一个Term进行查询。比如,若要查找包含字符串“lucene”的文档,则只需在词典中找到Term“lucene”,再获得在倒排表中对应的文档链表即可。

  2. AND

   指对多个集合求交集。比如,若要查找既包含字符串“lucene”又包含字符串“solr”的文档,则查找步骤如下。

   (1)在词典中找到Term “lucene”,得到“lucene”对应的文档链表。

   (2)在词典中找到Term “solr”,得到“solr”对应的文档链表。

   (3)合并链表,对两个文档链表做交集运算,合并后的结果既包含“lucene”也包含“solr”。

  3. OR

   指多个集合求并集。比如,若要查找包含字符串“luence”或者包含字符串“solr”的文档,则查找步骤如下。

   (1)在词典中找到Term “lucene”,得到“lucene”对应的文档链表。

   (2)在词典中找到Term “solr”,得到“solr”对应的文档链表。

   (3)合并链表,对两个文档链表做并集运算,合并后的结果包含“lucene”或者包含“solr”。

  4. NOT

   指对多个集合求差集。比如,若要查找包含字符串“solr”但不包含字符串“lucene”的文档,则查找步骤如下。

   (1)在词典中找到Term “lucene”,得到“lucene”对应的文档链表。

   (2)在词典中找到Term “solr”,得到“solr”对应的文档链表。

   (3)合并链表,对两个文档链表做差集运算,用包含“solr”的文档集减去包含“lucene”的文档集,运算后的结果就是包含“solr”但不包含“lucene”。

   通过上述四种查询方式,我们不难发现,由于Lucene是以倒排表的形式存储的,所以在Lucene的查找过程中只需在词典中找到这些Term,根据Term获得文档链表,然后根据具体的查询条件对链表进行交、并、差等操作,就可以准确地查到我们想要的结果,相对于在关系型数据库中的“like”查找要做全表扫描来说,这种思路是非常高效的。虽然在索引创建时要做很多工作,但这种一次生成、多次使用的思路也是非常高明的。

  

目录
相关文章
|
5月前
|
算法 索引
一篇文章讲明白Lucene学习总结之九:Lucene的查询对象(2)
一篇文章讲明白Lucene学习总结之九:Lucene的查询对象(2)
21 0
|
SQL 数据库 索引
08Lucene索引库查询 - 介绍
08Lucene索引库查询 - 介绍
58 0
|
数据采集 存储 Java
02Lucene实现全文检索的流程
02Lucene实现全文检索的流程
45 0
|
存储 SQL 缓存
四.全文检索ElasticSearch经典入门-字符串查询&批量查询&DSL查询过滤&乐观锁
四.全文检索ElasticSearch经典入门-字符串查询&批量查询&DSL查询过滤&乐观锁
|
分布式计算 搜索推荐 架构师
【搜索引擎】Solr:提高批量索引的性能
【搜索引擎】Solr:提高批量索引的性能
|
存储 数据采集 自然语言处理
lucene 索引流程详细分析|学习笔记
快速学习 lucene 索引流程详细分析
153 0
lucene 索引流程详细分析|学习笔记
|
存储 自然语言处理 数据库
Lucene 查询原理
# 前言 Lucene 是一个基于 Java 的全文信息检索工具包,目前主流的搜索系统Elasticsearch和solr都是基于lucene的索引和搜索能力进行。想要理解搜索系统的实现原理,就需要深入lucene这一层,看看lucene是如何存储需要检索的数据,以及如何完成高效的数据检索。
8643 1