假设给定倒排索引及查询,首先应确定查询词项是否在词汇表中,如果在应该返回词项对应的倒排记录表的指针。查找操作通常采用词典的经典数据结构。实现这种数据结构有两种方式:哈希表及搜索树。关于两者的定义在此不再赘述。哈希表除了需要解决哈希冲突的问题,在查询词存在轻微变形时也无法进行查询,并且由于词汇表往往是不断增长的,为当前需求设计的哈希函数可能过一段时间就不再适用。因此通常使用搜索树的查询方式。
搜索树也有很多种,词典搜索中普遍使用B树,B树的定义建议翻看数据结构教材了解其增删改查的方法。
通配符查询:
通配符查询是一种容错方式,当用户不确定一个词正确拼写形式,可以使用通配符 * 代替某些字符。
单个通配符查询:
对于只在词项末尾出现的通配符查询,可以使用B树进行查询,并返回所有匹配到通配符之前的词项对应的倒排记录表。对于只在词项开头出现通配符的词项,可以使用反向B树进行查询。通过将B树和反向B树结合起来使用可以处理只有一个通配符并存在于词项中间的查询,分别对通配符之前和之后的字符串使用B树和反向B树查询之后求交集即可。
一般通配符查询:
对于一般的通配符查询,需要对原本的倒排索引进行改进,这里有两种改进方式:轮排索引和 k-gram 索引。