可搜索加密之倒排索引
倒排索引是可搜索加密方案的一个重要的实现方式,主要和bloom filter 搭配使用解决单关键词检索问题。
传统的线性索引是以文章的名字作为key,而文章的内容作为value,例如:
传统的线性查找一个10MB的word文件,查找关键字如果在文档最后,大约3秒钟。
倒排索引则是记录每个词条出现在哪个文档以及文档中的位置,可以根据词条快速定位到包含这个词条的文档及出现的位置。
- 文档:索引库中的每一条原始数据,例如一个网页信息,一件商品信息。
- 词条:原始数据按照算法进行分词,得到每一个词。
创建文档列表
首先对原始文档进行编号,形成一个文档列表。
创建倒排列表
对文档中的数据进行分词,得到需要搜索的词条,对词条进行编号,构建索引列表,在数据位中记录包含该词条的所有文档编号。
倒排索引构建的流程可以总结为:
- 首先把所有的原始数据进行编号,形成文档列表。
- 把文档数据进行分词,得到很多的词条,以词条为索引。保存包含这些词条的文档的编号信息。
搜索的过程:
- 用户输入任意的词条时,首先对用户输入的数据进行分词,得到用户需要搜索的所有词条,然后拿着这些词条去倒排索引列表中进行匹配。
- 在词条对应的索引位找到文档的ID,并根据ID找到对应的文档。
这里面只是简单的介绍了倒排索引的原理,但是在实际可搜索加密方案中,索引还有词条都需要进行加密处理,在此不多赘述。