2011-05-04 77 views
2

我遇到了问题,我需要搜索MyISAM FullText字段。在MySql上搜索类似的词

我需要搜索什么?

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

我在我的领域有什么?

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

正如你在例子中看到,用户可以把一个错误的词搜索,我需要能够选择最匹配的词。

有没有人有一个想法我该怎么做?

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

+0

我如何s sphinx:http://sphinxsearch.com/不适合你,它听起来像是完美的解决方案,请阅读:http://www.ibm.com/developerworks/library/os-php-sphinxsearch/ – Johan 2011-05-04 16:36:18

+0

作为MySql的soundex使用PHP的sphinxsearch不起作用,因为它只使用俄语和英语形态,谢谢。 – Mallok 2011-05-04 16:49:42

回答

0

MySQL的SOUNDEX()函数可能会对您有所帮助,但它不会在FULLTEXT索引中出现一连串文字。

Levenshtein距离也许值得一看。

+0

是的,我一直在尝试使用SOUNDEX(),但现在只能使用Enlish,而且我需要使用西班牙语,反正谢谢。 – Mallok 2011-05-04 16:47:50

0

我不知道你是否可以达到你想要的,用@Johan的建议。无论如何。

如果你想使用狮身人面像您正在寻找被称为

制止

看到狮身人面像文档了解更多详情

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

功能中声明如下该文件

  • 斯芬克斯支持词干(英语,俄语和捷克语的词干为 内置;以及法语,西班牙语,葡萄牙语,意大利语的词干, 罗马尼亚语,德语,荷兰语,瑞典语,挪威语,丹麦语,芬兰语, 匈牙利语,可通过建立第三方 party libstemmer library);

我们目前在工作中使用狮身人面像,并且非常满意。

需要一些时间去适应它并理解它,但是一旦你得到了 它的地狱要比mysql全文搜索快得多。

问候

1

你可以下载一个莱文斯坦UDF
对于信息关于莱文斯坦看到:http://en.wikipedia.org/wiki/Levenshtein_distance

http://www.joshdrew.com/

下载地点:
http://www.joshdrew.com/mysql_levenshtein_udf-1.0.tar.gz

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

下面介绍如何在编译完成后安装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; 
+0

感谢您的建议,它似乎会为我的问题正常工作。 – Mallok 2011-05-04 18:21:42