2011-03-19 47 views
4

杰夫提到了http://blog.stackoverflow.com/2011/03/redesigned-users-page/索引这种查询的好方法是什么?

  • 搜索是“匹配的任何地方”了,但现在最低的比赛为3个字符。

优秀的东西!由于LIKE匹配的表现,以及全文搜索不精确的事实(例如,用户名中的首字母缩写太短而不能在任何全文索引中显示),这已被“破解”了很长一段时间。

必须有一种方法可以做到这一点,我有一个想法,但我想看看是否有人已经有这个挑战的解决方案(替代)。

样品查询:

SELECT TOP 36 * 
FROM users 
WHERE nickname LIKE '%' + @search + '%' 

注:即使标签是SQL服务器由于最大5个标签的,我很乐意调查其他RDBMS的可移植性解决方案。

+2

你见过这个吗? http://www.sommarskog.se/yourownindex.html本书接缝将在“构建您自己的索引”一章中涵盖您的查询。 – 2011-03-19 21:56:43

+0

@Mik - 是的,我知道这本书。如果您已阅读,请添加**,请勿在此处发布内容**。买它是为了一个好的原因。我在寻找自我构想或“开放”的想法。该书信息不是免费 – RichardTheKiwi 2011-03-19 22:02:14

回答

4

Postgres至少最近在其标准模块中添加了a trigram-matching solution。它将LIKE查询重写为多个trigram匹配查询。不幸的是,指数规模往往很大。另外还有Wildspeed,也有巨大的指数。我想这个大小很大程度上取决于列长度。

+0

+1非常有用。关于指数规模爆炸的说明是预期的。 – RichardTheKiwi 2011-03-19 10:36:55

+0

SQL Server现在会像Postgresql中的trigrams一样构建字符串索引。这个答案帮助我找到了正确的参考/搜索条件。 – RichardTheKiwi 2012-03-10 03:52:21

相关问题