R-tree based Full Text Search(基于R-tree实现的全文检索)

本文是根据篇讲解Full Text Search的文档整理的。

       在导航需求中,有对目的地的全文查询。我们可以把一个地址看成是由多个word组成的document。这个document的结构可以是这样(state,city,street),举个例子来说(江苏,南京,人民路)。我们可以用标准的全文检索系统来存储这种docment,即 inverted indexes(倒排索引)。比如sqlite的fts,还有Lucene,这些都是通过inverted indexes来实现全文检索。但是,这篇文章将介绍一种新的存储和查询方法来实现这种“low-dimensional”的文档类型。相对于inverted indexes,我们使用一种叫spatial index(空间索引)的技术,比如R-Tree。对于上面的提到(state,city,street)文档,我们把state映射为X,city映射为Y,street映射为Z。同时我们提供一个函数term2id( ),可以把所有可能的term(这里term就是word的意思)转换成一个整型数值的id,这样每一条docment的记录就能映射到一个3-dimensional的向量坐标,比如通过(term2id(江苏),term2id(南京),term2id(人民路)),就可得到一个3维的坐标向量,我们就可以把这些3维坐标存储到R-tree中。应用的时候,用户输入了一个 streetTerm和一个stateTerm来模糊查询一个地址,我们的查询就类似于:查找空间范围【 (term2id(stateTerm),0,term2id(streetTerm) ),(term2id(stateTerm),∞,term2id(streetTerm) )】内的所有向量。即把全文检索转换成在某个空间范围的过滤坐标点。

       我们知道,spatial index(空间索引)可以非常有效的支持对多维坐标的范围查找(inverted indexes(倒排索引)本质上是种一维查询)。so,R-tree有比倒排索引更好的管理低维度查询的能力。(当维度过高,比如超过6维,R-tree由于过多的重叠区域,导致查询性能显著的下降,这时候可以使用X-tree或者IQ-tree。)

    1,介绍

    全文检索允许用户通过一些terms就可以查询到对应的文档。当前的一些系统,如lucene或者sqlite-fts模块,都是基于inverted indexes(倒排索引)来实现的。即,把文档所包含的所有的term,反向建立term到对应的docment关系表,类似于InvertedIndex( Term, DocID )。这样的话,当我们查询的时候可以使用下面的的sql-1语句进行查询:

                   SELECT DocID FROM InvertedIndex WHERE Term= ’Neuschwanstein’

如果只有少量的docment包含这个term,性能是非常好的。

如果我们想查询那些docment包含2个term,比如“Bavaria”和“Neuschwanstein”, FTS的执行过程类似的sql-2语句为:

                    SELECT DocID FROM InvertedIndex WHERE Term=’Bavaria’

                    INTERSECT

                    SELECT DocID FROM InvertedIndex WHERE Term=’Neuschwanstein’

现在我们假定,有1000000个docment包含 “Bavaria”而只有10个docment包含“Neuschwanstein”。通过比较sql-1和sql-2的结果,反应出一个问题,尽管sql-1的结果和sql-2查询的docment个数差不多,但是sql-2消耗的时间却大于sql-1.因为sql-2需要轮询那1000000个含有“Bavaria”的docment。这篇文章将提出一个新的基于空间索引技术的全文检索。

2,一般概念





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值