静态结构化数据全文检索的实现思路

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了静态结构化数据全文检索的实现思路相关的知识,希望对你有一定的参考价值。

这里的静态结构化数据,是指从关系型数据库中抽取存储在NoSQL、文本文件或者其他格式文件的数据,并且数据不再变化。

全文检索是指任意字段的精确查询、模糊查询&范围查询。字母或数字模糊查询只支持前导查询,中文模糊查询则不受限制。

首先在抽取数据时,数据量特别大的数据表,按分区按ROWID分片分文件存储。

其次,实现数据查询。

思路一:

最常规的方法,在所有的字段上创建索引,由于事先不清楚数据的分布如何,因此都创建B+树索引。

中文模糊查询的实现是采用中文分词,把中文所有可能的分词组合起来创建索引。

思路二:

不区分字段,不区分字段对数据表的所有值创建bitmap倒排索引,key为数据值,索引value为该值所在的文件位置,并且按key值排序。

同时为倒排索引创建索引(即索引的元数据),内容包括该索引文件的最大和最小数据值以及每隔N行的数据值,用来加快定位数据的速度。

如,表T,某个数据文件的内容如下:

1,430111780101777,你好,测试,2016010101

2,430111780101778,你好,测试,2016010101

3,430111780101779,你好,测试,2016010101

 假设第一行的偏移量为0,第二行的偏移量为1,第三的偏移量为3,那么对应的倒排索引内容为:

1:0

2:1

3:2

2016010101:0,1,2

430111780101777:0

430111780101778:1

430111780101779:2

测试:0,1,2

你好:0,1,2

对应的倒排索引元数据如下:

[data]

min:1

max:你好

 

[index]

1:1

 

以上是关于静态结构化数据全文检索的实现思路的主要内容,如果未能解决你的问题,请参考以下文章

oracle数据库实现全文检索

App静态逆向分析思路浅析(过检测)

数据结构c语言如何实现循环队列

mysql数据库查询 查询一张表某列中是都包含另一张表某列的数据

MySQL数据同步ES的常用思路和方法

数据结构开发:静态单链表的实现