在一个MySQL查询中同时使用MATCH ANTION和LIKE可以吗



我注意到MATCH AGAINST无法搜索包含3个或更少字符的单词。因此,我在一个查询中添加了LIKEMATCH AGAINST

搜索查询:css和javascript提示

数据库条目:

id | subject
------------------------------------
1  | ten useful css tricks
------------------------------------
2  | performance tip for javascript

MySQL查询:

3个字符的单词:css,提示

SELECT id, MATCH (subject) AGAINST ('css and javascript tip' IN BOOLEAN MODE)
FROM articles WHERE MATCH (subject) AGAINST ('css and javascript tip')
OR subject LIKE '%css%' OR subject LIKE '%tip%'

这个查询在我的应用程序(使用小型数据库)上运行良好。我不确定随着数据库的增长,它是否会引起任何问题。

这是在使用MATCH ANTION时搜索3个字符单词的正确方法吗?如果没有,就像我提供的例子一样,我应该如何同时搜索cssjavascript

我用大约100K的行来完成它,而且速度并不慢。我认为还有其他选择,但对我来说这仍然足够:)

这里有一个例子:

//...
$tokens = explode(' ',$s));
$squery = '';
array_map('trim', $tokens);
foreach($tokens as $token){
if(strlen($token)>3)
$squery .= "+$token* ";
else
$where .= " AND title LIKE '%$token%'";
if(!empty($squery))
$select .= " , MATCH (title) AGAINST ('$squery' IN BOOLEAN MODE) AS score "
//...

对于Windows用户,您可以更改Mysql系统变量中的最小单词。编辑通常位于programdata/mysql/mysql-server5.x目录中的my.ini文件。有时,您必须将my.ini文件复制到程序文件/mysql/mysql-server5.x中才能使其工作。正如我在windows server 2003和2008中所经历的,而第一个在windows 7中工作。

在以下[mysqld]中插入以下内容:

ft_min_word_len = 2  
ft_stopword_file = ""

重新启动Mysql,你可以在服务中做到这一点,停止并播放,或者你知道的。

然后重新索引您的表,确保引擎是MYISAM。尽管最近InnoDB也在工作。

ft_stop_word_file会导致某些单词被排除在匹配之外。如果您有一个停止字文件,您可以将其等于",也可以指向所需的纯文本文件。你可以创建自己的stopword文件,例如mystopword.txt,里面会有用空格分隔的单词,你不想在匹配中包含这些单词。

相关内容

  • 没有找到相关文章

最新更新