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”查找要做全表扫描来说,这种思路是非常高效的。虽然在索引创建时要做很多工作,但这种一次生成、多次使用的思路也是非常高明的。

  

目录
相关文章
|
存储 算法 数据挖掘
重磅发布 | OpenSearch推出向量检索GPU图算法方案并支持GPU规格售卖
OpenSearch向量检索版推出了面向企业开发者的GPU图算法方案(CAGRA算法),支持客户直接购买GPU规格节点,是国内首家支持GPU规格的向量检索产品。
1201 12
|
SQL 安全 Java
java的SQL注入与XSS攻击
java的SQL注入与XSS攻击
392 2
|
SQL 自然语言处理 索引
DSL的诞生 | 复杂sql转成Elasticsearch DSL深入详解
源自死磕ElasticsearchQQ群(626036393)中的一个问题: 问题如下: where (position=ES or work=ES or content=ES) and academic=本科 and (city=北京 or city=深圳) 1 怎么构建ES的查询条件? 我的问题拆解与实现如下:
DSL的诞生 | 复杂sql转成Elasticsearch DSL深入详解
|
测试技术 索引
Elasticsearch咱们单节点数据量多大?
Elasticsearch咱们单节点数据量多大?
568 3
|
存储 缓存 自然语言处理
Elasticsearch中FST与前缀搜索
Elasticsearch中FST与前缀搜索
449 0
|
存储 缓存 JSON
fastjson2为什么这么快
fastjson2 提升速度的核心技术
76409 6
fastjson2为什么这么快
|
存储 分布式计算 关系型数据库
基于MinIO/Deleta Lake/Dremio和Superset或Metabase搭建简单的数据湖
基于MinIO/Deleta Lake/Dremio和Superset或Metabase搭建简单的数据湖
基于MinIO/Deleta Lake/Dremio和Superset或Metabase搭建简单的数据湖
|
存储 分布式计算 网络协议
白话Elasticsearch64-zen discovery集群发现机制
白话Elasticsearch64-zen discovery集群发现机制
442 0

热门文章

最新文章