支持通配符查询的k-gram索引
k-gram索引的通配符查询处理技术称为k-gram索引。
一个k-gram代表由k个字符组成的序列。对于词项castle来说,cas、ast、stl都是3-gram。我们用特殊的字符$来标识词项的开始或者结束,因此对于castle来说,所有的3-gram包括$ca、cas、ast、stl、tle及le $ .
在k-gram索引结构中,其词典由词汇表中所有词项的所有k-gram形式构成,而每个倒排记录表则由包含该k-gram的词项组成。
然而使用k-gram索引往往还需要进行一步处理。考虑3-gram索引结构的情况,对于查询red*,按照上面的处理步骤我们就会将原始查询转换为布尔查询$re AND red,这时可能会返回诸如retired的词项,因为他同时包含$re和red,但是这个结果显然并不满足原始的查询red,也就是说采用k-gram索引会导致非预期的结果。
为了解决这个问题,我们引入一个称为后过滤(postfiltering)的步骤,即利用原始的查询red对上述布尔查询产生的结果进行逐一过滤。过滤时只需要做简单的字符串匹配。和前面一样,我们最后在普通倒排索引中查找上述过滤得到的结果词项,从而得到最终的文档集合。
一个通配符查询往往会返回多个词项,而每个词项再根据普通倒排索引返回其所在的文档。索引引擎还可以通过布尔操作符支持多个通配符查询的集合,比如 re*d AND fe*ri。那么该查询的语义是什么?由于每个通配符查询都会变成多个词项的或查询,所以上述查询最后变成多个查询的与,即寻找包含同时匹配上red和feri的词项文档。
即使没有通配符查询的布尔组合,单个通配符查询处理也是非常耗时的,除了最后要在普通倒排索引中查找之外,还要在特定索引(如轮排索引或k-gram索引)中进行查找、在结果中进行过滤等操作。搜索引擎可以支持这些丰富的功能,但是搜索引擎通常将这些功能隐藏在一个大部分用户不访问的界面(如“高级索引”界面)下。如果把这些功能暴露在一般搜索界面上,用户常常会受到鼓励而使用这些功能,即便他们不是特别需要的时候(比如以a*开始的查询的索引),这样就会大大增加搜索引擎的负担。
支持通配符查询的k-gram索引的更多相关文章
- mysql性能优化-慢查询分析、优化索引和配置 (慢查询日志,explain,profile)
mysql性能优化-慢查询分析.优化索引和配置 (慢查询日志,explain,profile) 一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 ...
- mysql sql_safe_updates 不支持子查询的更新。
考虑到开发人员有时候不小心误更新数据,要求线上库的 MySQL 实例都设置 sql_safe_updates=1 来避免没有索引的 update.delete. 结果有一天开发发现下面的一个SQL 没 ...
- 十四、C# 支持标准查询运算符的集合接口
支持标准查询运算符的集合接口. System.Linq.Enumeralbe类提供的一些常用的API 来执行集合处理 1.匿名类型 2.隐匿类型的局部变量 3.集合初始化器 4.集合 5.标准查询运算 ...
- MySQL中IN子查询会导致无法使用索引
今天看到一个博客园的一篇关于MySQL的IN子查询优化的案例,一开始感觉有点半信半疑(如果是换做在SQL Server中,这种情况是绝对不可能的,后面会做一个简单的测试.)随后动手按照他说的做了一个表 ...
- 生成线上用https证书,支持通配符和多域名,初学Let’s Encrypt用于IIS,纯本地手动
自简书发布的上篇<生成本地测试用https证书,支持通配符和多域名,初学OpenSSL>以来,本地测试用https用的妥妥的. 线上一直用的腾讯云的免费证书(每个域名都要一个证书(滑稽), ...
- (5)MySQL的查询:模糊查询(通配符查询like)、限制符查询(limit)、排序查询(order by)、分组查询(group by)、(子查询)
注意事项 指令语法的优先级: where > group by >order by > limit 例:select count(id) as cnt,age from tablen ...
- 使用mysql5.7新特性解决前通配符查询性能问题
众所周知,在mysql里的后通配符可以使用索引查找,前通配查询却无法使用到索引,即使是使用到了索引,也是使用了索引全扫描,效率依然不高,再MySQL5.7之前,一直都没有好的办法解决,但是到了MySQ ...
- MySQL中in子查询会导致无法使用索引问题(转)
MySQL的测试环境 测试表如下 create table test_table2 ( id int auto_increment primary key, pay_id int, pay_time ...
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...
随机推荐
- video codec 学习笔记
一. H.264 (http://www.baike.com/wiki/H264) 三大标准: AVC(Advanced Video Coding,AVC) H.264,同时也是MPEG-4第十部分 ...
- hadoop —— eclipse插件安装配置
安装: 1. 将hadoop-core-0.20.2-cdh3u6/contrib/eclipse-plugin/hadoop-eclipse-plugin-0.20.2-cdh3u6.jar拷贝到e ...
- c语言学习的第11天 指针
#include<stdio.h> int main(void) { int * p; int i=3; int j; p=&i; j=*p; printf("i=%d, ...
- Download rtsp.c
1. [代码][C/C++]代码 /* * Copyright (c) 2011, Jim Hollinger * All rights reserved. * * Redistribution an ...
- html5--2.1新的布局元素(1)-header/footer
html5--2.1新的布局元素(1)-header/footer 学习要点 了解header/footer的语义和用法 使用header/footer进行一个简单的布局 header元素(标签) 用 ...
- [Poi2011] Meteors(从不知所措到整体二分)
Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby galaxy. The plan ...
- 用CSS实现新闻轮播效果
CSS: /* Make it a marquee */ .marquee { width: 450px;margin: 0 auto;overflow: hidden;white-space: no ...
- liunx命令之:命令链接ftp服务器
1. 连接ftp服务器 格式:ftp [hostname| ip-address]a)在linux命令行下输入: ftp 192.168.1.1 b)服务器询问你用户名和密码,分别输入用户名和相应密码 ...
- ACM学习历程——UVA540 Team Queue(队列,map:Hash)
Description Team Queue Team Queue Queues and Priority Queues are data structures which are know ...
- bzoj 1369: Gem 树形dp
题目大意 给出一棵树,要求你为树上的结点标上权值,权值可以是任意的正整数 唯一的限制条件是相临的两个结点不能标上相同的权值,要求一种方案,使得整棵树的总价值最小.N<=10000 题解 我们可以 ...