SOLR--7--传统关系型数据库在全文检索中的劣势

 

例子描述:

搜索和“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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值