2013-02-20 128 views
1

我讨厌4000多个数据库广告。我在字段标题,模型和描述上使用了FULLTEXT索引。Mysql搜索引擎喜欢和匹配

在MySQL中我改变的ft_min_word_len 4至3

实际上的价值,所有的结果不匹配。

下面是一个简单的要求:

SELECT * , 
    MATCH (
     anno_modele, anno_titre, anno_desc 
    ) 
    AGAINST (
     "330" 
    ) AS relevance 
FROM (
    `annonce` 

JOIN possede 
USING (`anno_id`) 
JOIN annonceur 
USING (`ann_id`) 
JOIN cat_lang 
USING (`cat_id`) 
JOIN lang_pays 
USING (`pays_id`) 
JOIN marque 
USING (`mar_id`) 
WHERE `mar_id` =867 
AND MATCH (
    anno_modele, anno_titre, anno_desc 
) 
AGAINST (
    " 330" 
) 
AND `cat_id` 
IN (
    '3' 
) 
AND `anno_active` =1 
AND `anno_mode` =1 
AND `lang_pays`.`lang_id` = '3' 
GROUP BY `anno_id` 
ORDER BY `anno_prix` , `relevance` DESC 
LIMIT 15 

这符合我的3个结果。 330只是字段“anno_model”。

如果做一个像anno_modele LIKE '%330%',它匹配我9结果。

这里是由对阵匹配结果:

enter image description here

这里是由像

enter image description here

正如你所看到的,当它存在的空间相匹配的结果.. 。结果与MACTH AGAINST不匹配

问题在我的要求或它是如此除此之外呢?

请帮助我=)

+0

你在你的第二场比赛有330之前的空间对,我假设这个空间应该是 – legrandviking 2013-02-20 15:54:10

+0

后,当我删除此白色空间,没有任何改变。我的目标是匹配包含“330”的结果,在之前或之后匹配或不包含空格...实际上,我希望得到与LIKE – 2013-02-20 16:25:41

回答

2

尝试使用通配符*

...AGAINST ('*330*') ... 
+0

相同的结果,它可用于更完整的查询......“蓝色火车330”?我是否会通配所有术语“\ * blue \ * \ * train \ * \ * 330 \ *?? – 2013-02-20 16:44:34

+0

我会推荐一些更接近此”* blue * train * 330 *“的内容,但这会导致所有单词通常使用反对语句,mysql会将句子中的单词分开,并为每个单词提供u点。请访问http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html更多关于完整搜索文本的信息 – legrandviking 2013-02-20 18:34:37

+3

通配符完美地工作在“BOOLEAN模式”(“330 *”在BOOLEAN模式下)谢谢 – 2013-02-21 09:13:56