首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要全文搜索功能类似于LIKE%...%

需要全文搜索功能类似于LIKE%...%
EN

Stack Overflow用户
提问于 2013-08-30 23:20:21
回答 1查看 35关注 0票数 0

我需要搜索ISBN列,并允许返回部分匹配。使用LIKE是准确的,但非常慢,大约2-3秒:

代码语言:javascript
复制
select * from Isbns where isbn like '%1234567890123%'
-- returns 1 result: 1234567890123

select * from Isbns where isbn like '%12345678%'
-- returns 2 results: 1234567890123, 1234567811111.

使用全文索引,搜索是即时的,但是返回了太多的结果。

代码语言:javascript
复制
select * from Isbns where freetext(isbn, '"1234567890123"')
-- returns thousands of results, such as the exact match of 1234567890123, 
-- but also fuzzy matches such as: 1234567770123, 1234567778883, etc.

您可以看到主要区别在于LIKE根据术语开头和结尾的通配符进行匹配,而FREETEXT (和CONTAINS)则根据术语的整体内容进行匹配,即使包装在""中也是如此。由于我们几乎所有的ISBN都以相同的几个数字开头,并且以下数字几乎没有变化,因此返回了太多的匹配。

有没有一种方法可以使FREETEXT或CONTAINS的性能类似于LIKE,或者其他任何利用全文索引进行搜索的方法?

EN

回答 1

Stack Overflow用户

发布于 2013-08-30 23:24:14

如果您的所有ISBN都以相同的几个数字开头,请去掉字符串开头的通配符:

代码语言:javascript
复制
select *
from Isbns
where isbn like '12345678%';

然后确保你在isbns(isbn)上有一个索引。当like以一个常量开始时,许多数据库都会对其进行优化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18536389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档