查询反模式 - 全文搜索
2015-05-08 17:56
218 查看
一、目标:全文搜索
任何存储文本的应用都有针对这个文本进行单词或词组搜索的需求。我们使用数据库存储越来越多的文本数据,同时也需要搜索速度越来越快。Web应用尤其需要高性能和高扩展性数据库搜索技术。SQL基本原理就是一列中的单个数据是原子性的。也就是说,当我们对两个值进行比较时,通常是把两个值当成一个整体来比较,在SQL中比较子字符串总是意味着低效和不精确。
二、反模式:模式匹配断言
SQL提供了模式匹配断言来比较字符串,并且这是很多程序员用来搜索关键字的第一选择。最广泛使用的就是LIKE断言。LIKE断言提供了一个通配符(%)用以匹配0个或多个字符。在一个关键字前以及之后使用通配符能够匹配到包含这个挂件子的任意字符串。第一个通配符匹配了关键字之前的所有文本,第二个通配符匹配了关键字之后的所有文本。SELECT * FROM Article WHERE ArticleContent LIKE '%刘备%'
使用匹配模式操作符最大的缺点就在于性能问题。它们无法从传统的索引上受益,因此必须进行全表扫描。由于对一个字符串列进行匹配操作非常耗时,全表遍历所花的总时间就非常多。
对于英文来说,经常会返回意料之外的结果。比如:
SELECT * FROM Article WHERE ArticleContent LIKE '%one%'
可能会返回money、phone、lonely等。在关键字两端都加上空格也不能完美解决这个问题,因为无法匹配到后面直接跟着标点符号的单词或者正好在文本开头或结尾的单词。
三、合理使用反模式
如果你使用通配符的查询是一个临时查询,那么这是一个非常不错的办法。你能够非常快速地获得返回结果。其次,如果你是为一些非常简单的需求设计这样的模式匹配,它们就能帮助你使用最少的工作量获得正确的结果。四、解决方案:使用正确的工具
1、使用数据库扩展几乎所有的数据库厂商都为全文搜索这个需求提供了解决方案,但这些方案并没有任何的标准,各个数据库的实现也不不兼容。如果只使用一种数据库品牌,这些特性就是获得高性能文本搜索的最佳捷径,并且能和SQL查询整合的非常好。其他厂商的并不清楚,但感觉SQL Server的这个东西很弱小。关于SQL Server的全文搜索,可以到这里查看。这里不再述。/article/4678158.html
2、使用第三方搜索框架
LUCENE.NET、HUBBLE.Net。这些个东西以后再整理。
3、反向索引,实现自己的搜索
虽然不是很相信这个这么简单的方案会带来多好的性能,但是觉得作为学习,反向索引这个东西还是有必要学习一下。But Not Now!
相关文章推荐
- 查询反模式 - 全文搜索
- 查询反模式 - 全文搜索
- [Elasticsearch] 全文搜索 (三) - match查询和bool查询的关系,提升查询子句
- HubbleDotNet 开源全文搜索数据库项目--为数据库现有表或视图建立全文索引(三) 多表关联全文索引模式
- Lucene全文搜索查询string时间类型
- 56.笔记 MySQL学习——布尔模式全文搜索
- [Elasticsearch] 全文搜索 (三) - match查询和bool查询的关系,提升查询子句
- 57.笔记 MySQL学习——查询扩展全文搜索
- HubbleDotNet开源全文搜索数据库项目--查询方法汇总 ——>eaglet
- [Elasticsearch] 全文搜索 (二) - 多词查询及查询的合并
- [Elasticsearch] 全文搜索 (三) - match查询和bool查询的关系,提升查询子句
- HubbleDotNet 开源全文搜索数据库项目--为数据库现有表或视图建立全文索引(三) 多表关联全文索引模式
- SQL查询用Like搜索条件中的模式匹配
- SQL Server 全文搜索 配置、查询初体验
- SQL Server 全文搜索 配置、查询初体验
- sql server中随即搜索出几条数据 全文,取前记录,查询前
- mysql 多表关联查询 实现 全文匹配的 模糊搜索接口 SQL
- 全文搜索怎么给查询语句与文档相关性打分
- SQL查询用Like搜索条件中的模式匹配
- [Elasticsearch] 全文搜索 (一) 基础概念和match查询