博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SOLR--7--传统关系型数据库在全文检索中的劣势
阅读量:6802 次
发布时间:2019-06-26

本文共 1062 字,大约阅读时间需要 3 分钟。

hot3.png

 

例子描述:

搜索和“buying a home”相关的书。

数据库中有一个Book表,存在下图9条记录

(图一 与”buying a home"相关的book name 6条)

(图二 与"buying a home"不相关的book name 3条)

 

当我们在输入框输入buying a home的时候,期望结果是搜出图一中的6条数据。以下使用SQL进行查询测试。

 

1,使用 = 匹配

 

SELECT * FROM Books

        WHERE Name = 'buying new home';

 

无查询结果

 

SELECT * FROM Books

        WHERE Name = 'buying a new home';

 

查到一条记录

 

2, 使用like进行模糊匹配,and连接的结果

 

SELECT * FROM Books

        WHERE Name LIKE '%buying%'

            AND Name LIKE '%a%'

            AND Name LIKE '%home%';

 

仍然只查询到了一条相关记录

000250_6Fw0_915970.png

 

3,使用like进行模糊匹配,or连接

 

SELECT * FROM Books

        WHERE Name LIKE ‘%buying%’

               OR Name LIKE ‘%a%’

               OR Name LIKE ‘%home%’;

 

显然很多不相关的book被查询了出来

使用传统的关系型数据库进行查询,我们发现主要存在以下问题:

 

1,只能够进行子字符串的匹配查询。如上例中,只能对查询词分开来进行匹配查询,如果使用“=”进行匹配很多相关的文档没有被检索出来。

 

2,无法区分语言学上的变化。这里指buy到buying的变化(中文不存在这种问题)。

 

3,同义词无法区分。buying和purchasing都有购买的意思,但是数据库的匹配查询无法认为他们是一样的。

 

4,不重要的词仍然被作为查询条件进行查询。这里指查询 a 也作为了一个条件。同理中文查询中“的”这种无意义的词在查询时也不应包含。

 

5,没有相关性的排序。从上图的查询结果看,不相关的内容却被排到了前面。这个顺序依赖于数据库的内部顺序。

 

当这个表的数据逐渐变大的时候,like查询的匹配会非常慢,即使在有索引的情况下。况且关系型数据库也不应该对文本字段进行索引(感兴趣的同学可以了解一下数据库的索引创建过程)。

 

根据以上的实验得出结论:关系型数据库不适合全文检索。

 

更多内容可关注微信公众号,金沙数据

转载于:https://my.oschina.net/yimiyan/blog/809337

你可能感兴趣的文章
HTTP参数中Etag的重要性
查看>>
T-MBA·沟通·倾听·V1 | 7天学习倾听,6月14日开营,包学会!
查看>>
java架构程序员月入破3万到底是怎么炼成的,一篇文章让你了解
查看>>
mongoDB JAVA操作
查看>>
python基础进阶
查看>>
高级GLSL
查看>>
【27】非阻塞算法
查看>>
cacti 安装
查看>>
云计算(PAAS)领域开始火爆的 Docker 到底是什么?
查看>>
PXE网络装机(有人值守与无人值守)
查看>>
python 爬虫 cookie 的保存和加载
查看>>
store.js
查看>>
javascript深入理解js闭包
查看>>
Weblogic 12版本以下服务器如何调整SSL协议和加密套件
查看>>
8月上旬全球增长最快域名商:万网第7 西部数码第12
查看>>
我国.NET域名74.6万居全球第3:1月第三周增1749个
查看>>
我国.BIZ域名总量5.3万居全球第7:1月第三周增425个
查看>>
4月第二周中国域名增5.7万再居第二 香港减461个
查看>>
8月国外最佳主机提供商TOP5:排名依旧 iPage夺冠
查看>>
TypeError: datetime is not JSON serializable
查看>>