Lucence倒排索引

2024-09-06 09:58
文章标签 索引 倒排 lucence

本文主要是介绍Lucence倒排索引,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

带着问题探索:

  • 全文检索,为什么要全文检索?
  • 什么是lucence?
  • 什么是倒排索引?

一、全文检索

要了解全文检索首先需要了解:结构化数据与非结构化数据,以及半结构化数据,这三种数据构成了我们生活中所有数据的组成形式。

 结构化数据非机构化数据半结构化数据
含义有固定格式的的数据无固定格式的数据有一定格式的数据
举例数据库中的数据文章,邮件,博客内容XML,HTML文件
查询方式sqlgoogle,baidu搜索,linux下的grep命令,window搜索文件转化为半结构化或结构化数据查询

全文搜索的方式:

  1. 顺序扫描法:搜索词,将文章从头到尾,一个字符一个字符扫描,文件很大,耗时;搜索文件,或是将一个系统中的文件一个一个遍历查找,文件数量很多,耗时。linux中的grep命令就是这样的操作。

  2. 全文检索:将非结构化的数据,一部分数据提取出来,重新组织,使其有一定的结构性。(这部分提取出来的重新组织的数据称为索引)然后对此索引进行搜索。

举例:

  1. 如书中的目录,每一个章节的标题,都相当于是书的索引,标题所对应的内容都是非结构化的数据。标题也是从这些内容中提取出来的数据,我们将标题拿出来构建索引,指向对应的页数,便可快速找到对应的非结构化数据。
  2. 字典。

二、Lucence

lucence是Apache中一个开源的全文搜索引擎工具包,是一个全文搜索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。

目的是为开发人员提供一个简单医用的工具包。方便在目标系统中实现全文检索的功能,或者基于此建立完整的全文搜索引擎。

三、倒排索引

倒排索引就源于应用中需要根据属性的值,来查找记录的需求。这种索引表中的每一项都包括一个属性值和具有该属性值的个记录的位置。

由于倒排索引是由属性值确定记录的位置,而不是由记录确定属性值,因而称为倒排索引(inverted index)。

搜索引擎的关键步骤:

         

  1. 取得关键词:将文章做分词操作,取得关键词与文章的位置
  2. 建立倒排索引:建立索引,与文章的关系

举例:

两篇短文:

  1. I have an apple;
  2. The apple is bad,he has a bucket apples;

倒排索引构建:

  • 分词器根据分词规则分析,每个文章中的词,如标记所示,取得关键词。
  • 构建倒排索引。

最终会形成这样的倒排索引关键词频率位置结构:

关键词文章号[出现频率]出现位置
apple

1[1],

2[2]

3,

2,6

bad2[1]2
bucket2[1]5
have

1[1],

2[1]

2,3
he2[1]3
i1[1]1

实现:

lucence将上面三列分别生成了词典文件(Term Dictionary),频率文件(frequencies),位置文件(positions)。

词典文件还存了指向频率文件和位置文件的指针。

 

这篇关于Lucence倒排索引的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1141702

相关文章

oracle数据库索引失效的问题及解决

《oracle数据库索引失效的问题及解决》本文总结了在Oracle数据库中索引失效的一些常见场景,包括使用isnull、isnotnull、!=、、、函数处理、like前置%查询以及范围索引和等值索引... 目录oracle数据库索引失效问题场景环境索引失效情况及验证结论一结论二结论三结论四结论五总结ora

Python中列表的高级索引技巧分享

《Python中列表的高级索引技巧分享》列表是Python中最常用的数据结构之一,它允许你存储多个元素,并且可以通过索引来访问这些元素,本文将带你深入了解Python列表的高级索引技巧,希望对... 目录1.基本索引2.切片3.负数索引切片4.步长5.多维列表6.列表解析7.切片赋值8.删除元素9.反转列表

MySQL的索引失效的原因实例及解决方案

《MySQL的索引失效的原因实例及解决方案》这篇文章主要讨论了MySQL索引失效的常见原因及其解决方案,它涵盖了数据类型不匹配、隐式转换、函数或表达式、范围查询、LIKE查询、OR条件、全表扫描、索引... 目录1. 数据类型不匹配2. 隐式转换3. 函数或表达式4. 范围查询之后的列5. like 查询6

PostgreSQL如何查询表结构和索引信息

《PostgreSQL如何查询表结构和索引信息》文章介绍了在PostgreSQL中查询表结构和索引信息的几种方法,包括使用`d`元命令、系统数据字典查询以及使用可视化工具DBeaver... 目录前言使用\d元命令查看表字段信息和索引信息通过系统数据字典查询表结构通过系统数据字典查询索引信息查询所有的表名可

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

贝壳面试:什么是回表?什么是索引下推?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50+)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: 1.谈谈你对MySQL 索引下推 的认识? 2.在MySQL中,索引下推 是如何实现的?请简述其工作原理。 3、说说什么是 回表,什么是 索引下推 ? 最近有小伙伴在面试 贝壳、soul,又遇到了相关的

Mysql高级篇(中)——索引介绍

Mysql高级篇(中)——索引介绍 一、索引本质二、索引优缺点三、索引分类(1)按数据结构分类(2)按功能分类(3) 按存储引擎分类(4) 按存储方式分类(5) 按使用方式分类 四、 索引基本语法(1)创建索引(2)查看索引(3)删除索引(4)ALTER 关键字创建/删除索引 五、适合创建索引的情况思考题 六、不适合创建索引的情况 一、索引本质 索引本质 是 一种数据结构,它用

ElasticSearch 6.1.1 通过Head插件,新建索引,添加文档,及其查询数据

ElasticSearch 6.1.1 通过Head插件,新建索引,添加文档,及其查询; 一、首先启动相关服务: 二、新建一个film索引: 三、建立映射: 1、通过Head插件: POST http://192.168.1.111:9200/film/_mapping/dongzuo/ {"properties": {"title": {"type":

ElasticSearch 6.1.1运用代码添加索引及其添加,修改,删除文档

1、新建一个MAVEN项目:ElasticSearchTest 2、修改pom.xml文件内容: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.or

postgres数据库中如何看查询是否走索引,以及在什么情况下走索引

在 PostgreSQL 中,可以通过 EXPLAIN 或 EXPLAIN ANALYZE 查看查询计划,以判断查询是否使用了索引。除此之外,了解索引的使用条件对于优化查询性能也很重要。 1. 如何查看查询是否使用索引 使用 EXPLAIN 查看查询计划 EXPLAIN 显示 PostgreSQL 如何执行查询,包括是否使用索引。 EXPLAIN SELECT * FROM users WH