CM开发日志(四) - Solr 反向索引

什么是反向索引?(很多文章也称为倒排索引)

索引技术主要有以下3种: 反向索引,后缀数组和签名文件。其中, 反向索引技术在当前大多数的信息检索系统中得到了广泛的应用, 它对于关键词的搜索非常有效, 在lucene中也是使用的这种技术。后缀数组技术在短语查询中具有很快的速度, 但是这样的数据结构在构造和维护时都比较复杂一些。签名文件技术在20世纪80年代比较流行, 但是后来反向索引技术逐渐超越了它。

反向索引是目前搜索引擎公司对搜索引擎最常用的存储方式, 也是搜索引擎的核心内容, 反向索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值, 而是由属性值来确定记录的位置, 因而称为反向索引。反向索引是以关键字和文档编号结合, 并以关键字作为主键的索引结构。

应用举例

Solr 使用了 Lucene 的反响索引为【快速搜索】提供动力。虽然我们不会深入介绍太多 Luncene 内部的数据结构,但是了解反向索引的【基本结构】还是非常有必要的。

回想一下前面用过的搜索书籍的例子,我们可以在下表中看到索引是如何将关键字映射到文档的:

原始文档(传统的数据库)
文档编号 内容字段
1 A Fun Guide to Cooking
2 Decorating Your Home
3 How to Raise a Child
4 Buying a New Car
5 Buying a New Home
6 The Beginner’s Guide to Buying a House
7 Purchasing a Home
8 Becoming a New Home Owner
9 How to Buy Your First House
Lucene 反向索引文档
关键字 文档编号
a 1,3,4,5,6,7,8
becoming 8
beginner’s 6
buy 9
buying 4,5,6
car 4
child 3
cooking 1
decorating 2
first 9
fun 1
guide 1,6
home 2,5,7,8
house 6,9
how 3,9
new 4,5,8
owner 8
purchasing 7
raise 3
the 6
to 1,6,9
your 2,9

传统的数据库表示文档需要使用文档 ID 来映射文档中包含了关键字的一个或多个字段,而反向索引刚好和这种方式相反(因此叫做反向索引),它映射关键字到包含了这个关键字的文档ID。你可以通过上面的表格看到,原始数据通过空格分开,并且全部转换成了小写字母后存入了反向索引,而其它一切都保持不变。还要注意的是,不仅仅是上面的这些简单的信息,另外附加的一些文本内容也有可能被添加到反向索引。所有的关键字可以在进行内容分析的时候进行修改,添加或删除。

最后还有两个关于反向索引的细节需要了解:

  • 所有在索引中的关键字可以映射到一个或多个文档。
  • 反向索引中的关键字按照字典顺序升序排列。

好了,现在我们已经对反向索引有个大致的了解。更多细节部分可查看 Lucene 相关资料。

时间: 2024-11-11 10:05:32

CM开发日志(四) - Solr 反向索引的相关文章

团队开发日志四

##日志四****作者:姜娇英 周佩 时间:2017-1-9***** 5 完成了梯形插值编程的单元测试 * 单元测试2:测试了在反向运动过程(目标位移和速度均反向)中某一时刻的速度和位移是否正确. * 单元测试3:测试了在正向运动(目标位移正向)目标速度反向过程中某一时刻的速度和位移是否正确. * 单元测试3:测试了在反向运动(目标位移反向)目标速度正向过程中某一时刻的速度和位移是否正确.

CM开发日志 - 搜索引擎(二)

Solr多核(MultiCore)的概念 想象一下,如果在你的应用里,如果你的索引要区分Catalog,多语言和索引类型,这样的话,一个Search应用对应一个Solr实例是远远不够的,这样就引入了Solr多核(MultiCore)的概念.Solr多核就是在一个search 应用里面创建多个实例,然后给实例分别创建文件系统. Solr多核的创建 WebSphere Commerce本地开发环境里面定义了一个基础的搜索组件(V:\IBM\WCDE_INT70\components\foundati

CM开发日志 - 搜索引擎(一)

IBM WebSphere Commerce使用了Apache Solr Search做为搜索引擎解决方案,提供了全方位的封装,主要体现在如下方面: Solr多核的创建 DIH (Data Import Handle) 处理的preprocess & indexbuild 由Search REST Service提供的很方便的针对索引文件的查询 这三个方面也是贯穿solr搜索的整个生命周期的. 介绍:开发环境 目前我使用的WCS版本是WebSphere Commerce Version 7 -

CM开发日志 - 搜索引擎(三)

到了这篇博文,对于solr的整个生命周期,希望各位要有个初步的认识(以便能抓住整个系列文章的脉络). 我用自己的话总结为以下: solr 多核创建 -> 索引的预处理 -> 索引的创建和持久化 -> 索引的调用(Search API与索引文件的交互) 不对的地方希望大家指正.另外,最近在查一些关于Solr里面比较深入具体的资料的时候,发现网上的很多资料要么是简单的相互拷贝,要么就是英文资料.总是感觉不那么得心应手之余,有些东西自己还是得去看solr wiki或者查看源代码.也希望自己的一

《微信企业号开发日志》本地调试程序四

这一节完成模拟微信回调发送消息!!! 先看效果图吧: 这个是模拟发送text文本消息的, 解析: 1.微信text文本最终是以2格式的xml文本post到我们的服务器接口的,1是对应xml各个字段值, 2.是最终需要post到我们服务器的xml明文 3.是将2中需要post到我们服务器的xml明文按照token,timestamp和nonce加密后的xml密文,(最终post到我们服务器的是这种经过加密后的xml,我们在接受接口中要先对其进行解密) 4.是将我们服务器中返回的xml明文展示出来

SOLR增量索引--删除业务、定时增量索引

Ok,我又来写SOLR的内容了,昨天做了修改和增加的增量索引,今天来说说关于删除的增量索引以及定时更新增量索引,废话不多说,下面进入正文. 一.增量索引之删除 昨天已经说过,增量索引其实就是SOLR对上次做过(增量或者全量)索引之后到这次做索引之间的这段时间数据库发生变化的数据进行创建索引,昨天我们说了增加一条数据或者修改一条数据之后创建增量索引,现在来说删除数据的增量索引. 其实这里所说的删除是假删除,什么意思呢?就是并不是说在数据库中把某些数据给彻底删除掉,而是说给你不想创建索引的数据一个标

微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo

原文:微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 前几章中我讲解了微信开发平台提供第三方平台的好处,和使用流程,如果你看了我的文章相信你对开放平台有了初步的了解,但是在实际的开发过程

QT开发(四十八)——数据库SQL接口层

QT开发(四十八)--数据库SQL接口层 SQL接口层提供了对数据库的访问,主要类包括Qt SQL模块中的QSqlDatabase.QSqlQuery.QSqlError.QSqlField.QSqlIndex和QSqlRecord.QSqlDatabase类用于创建数据库连接,QSqlQuery用于使用SQL语句实现与数据库交互. 一.QSqlDatabase 1.QSqlDatabase简介 QSqlDatabase类提供了通过连接访问数据库的接口,QSqlDatabase对象本身代表一个连

QT开发(四十九)——数据库用户接口层

QT开发(四十九)--数据库用户接口层 用户接口层主要包括Qt SQL模块中的QSqlQueryModel.QSqlTableModel.QSqlRelationalTableModel.用户接口层的类实现了将数据库中的数据链接到窗口部件上,是使用模型/视图框架实现的,是更高层次的抽象,即便不熟悉SQL也可以操作数据库.需要注意的是,在使用用户接口层的类之前必须先实例化QCoreApplication对象. QT中使用了自己的机制来避免使用SQL语句,提供了更简单的数据库操作及数据显示模型,分别