像Quicksilver这样的mySQL中的字符串排序算法

时间:2011-07-13 19:13:23

标签: mysql search autocomplete fuzzy-search

mySQL中的字符串排序算法

Quicksilver评分算法

PHP Port
Javascript Port
MySql端口(哦没有链接)这是我的问题继续阅读

使用示例:

score("hello world","axl") //=> 0.0  
score("hello world","ow") //=> 0.6  
score("hello world","hello world") //=> 1.0

好的,我的问题就在这里。这些都很棒,感谢那些让它成为可能的人!我很乐意以mysql的方式做到这一点。数据库不是我的专业领域,但如果我想在MySQL中这样做,我该怎么做?我应该,有更好的方法吗?

我对此的看法就是这样。

现实生活中的例子:

我的数据库中有14000多条记录。 “ ICD9 ”医疗代码表,其中包含医疗代码和说明。

表:
ICD9_codes

字段:
代码
code_text

我正在对php函数进行jQuery ajax调用。

 $query = $this->db->query("SELECT code, code_text FROM codes WHERE MATCH (code,code_text) AGAINST ('" .$q. "')");

这很有效,那很好。但我真正的心愿是使用评分算法

现在纠正我如果我错了,我很可能会这样,如果你这样做我会感到震惊:)

我认为搜索14000多条记录是一个非常昂贵的过程。 (通过使用jQuery自动完成功能,最小值为2个字符)。 (这可能不适合一些,因为就像我说的“数据库不是我的专业领域”)

所以这就是我想知道的。是否值得某些时间知道MySQL并使MySQL功能得分等同于

Select code, code_text, score("hello world","ow") from ICD9_codes

如果您有任何优点或缺点,您会喜欢听到这个想法吗?或者知道更好的方法:)

优点:

  • MySQL 的原生方式搜索算法

缺点:

  • 如果我无法控制数据库,我就无法添加一个mysql函数得分()(这会让我以前在 php javascript中执行此操作

此时会在那里滑倒(Stackoverflow很棒!!!社区很棒!) 谢谢, 达斯汀

1 个答案:

答案 0 :(得分:1)

select code, code_text, match(code,code_text) against('inputstring') as score
from ICD9_codes

它来自MySQL 5.0参考全文搜索功能部分