在MySql上搜索类似的单词

时间:2011-05-04 16:02:51

标签: mysql full-text-search

我遇到了问题,我需要搜索MyISAM FullText字段。

我需要搜索什么?

ie. "avrir"
ie. "dividdos"
ie. "petacular"

我的领域有什么?

ie. "abrir"
ie. "divididos"
ie. "espectacular"

正如您在示例中所看到的,用户可以在搜索中输入错误的单词,我需要能够选择最匹配的单词。

有没有人知道我该怎么做?

我读到了“sphinx”,但我找不到这个问题的解决方案。

3 个答案:

答案 0 :(得分:1)

你可以下载levenshtein udf
有关levenshtein的信息,请参阅:http://en.wikipedia.org/wiki/Levenshtein_distance

http://www.joshdrew.com/

下载位置:
http://www.joshdrew.com/mysql_levenshtein_udf-1.0.tar.gz

这将允许您安装一个UDF,它将在MySQL中添加一个levenshtein函数,您可以在查询中使用它。 您可以使用.gz文件中的指令编译UDF on linux

以下是编译后如何安装UDF。

>mv mysqllevenshtein.so /usr/lib

然后启动mysql

>mysql -uroot -pPASS

在mysql中

mysql> use DATABASE
  

数据库已更改

mysql> CREATE FUNCTION levenshtein RETURNS INT SONAME 'mysqllevenshtein.so';

select levenshtein(word1,word2) as dist 
from book where ETC........... 
order by dist asc 
limit 0,10;

答案 1 :(得分:0)

MySQL的SOUNDEX()函数可能会对您有所帮助,但它不能用FULLTEXT索引中的一串文本神奇地工作。

Levenshtein距离也许值得一看。

答案 2 :(得分:0)

我不确定你是否能达到你想要的效果,而@Johan建议的那样。反正。

如果您想使用sphinx,您要搜索的功能称为

<强>词干

有关详细信息,请参阅Sphinx文档

http://sphinxsearch.com/docs/current.html

文档

中说明了以下内容
  • Sphinx支持词干(英语,俄语和捷克语的词干表   内置;和法语,西班牙语,葡萄牙语,意大利语,   罗马尼亚语,德语,荷兰语,瑞典语,挪威语,丹麦语,芬兰语,   匈牙利人可以通过建造第三个   party libstemmer library);

我们目前在工作中使用Sphinx并且非常满意。

需要一些时间来习惯并理解它,但一旦你得到它 它的地狱比mysql全文搜索快得多。

此致