2013-02-20 124 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