2013-06-27 95 views
1

我遇到了問題。Mysql帶加號的全文搜索

在我的MySql數據庫中,我在產品表中有40000行。表格有一列叫做T9Text。 我的一行T9Text區域是這樣的:

UNISNLS106B UNI.SNLS 106B SNLS-106B M.OT. 12V 2DELİKMOTOR CRAFT TIPI UNIPOINT 66-205 66205 F02Z-11390-A F02Z11390A E90Z-11390-A E90Z11390A F4DZ-11390-A F4DZ11390A F3VY-11390-A F3VY11390A E90Z-11390-A E90Z11390A FORD ESCORT MERCURY TRACER FORD

對於自動完成過程,我在db中運行存儲過程。它是這樣的:

SELECT p.Code, 
    p.Name, 
    p.`T9Text`, 
    MATCH (p.T9Text) AGAINST ('+UNI* +SNLS* +106B*' IN BOOLEAN MODE) AS SCORE 
FROM product p 
WHERE MATCH (p.T9Text) AGAINST ('+UNI* +SNLS* +106B*' IN BOOLEAN MODE) >0 
GROUP BY p.Name 
ORDER BY SCORE DESC 

像這樣,它工作得很好,只返回一行。

但我需要寫我在那裏的條件是這樣的:

MATCH (p.T9Text) AGAINST ('+*UNI* +*SNLS* +*106B*' IN BOOLEAN MODE) >0 

有了上面的代碼返回1877年行。它就像加號不起作用

MATCH (p.T9Text) AGAINST ('+*UNISNLS106B*' IN BOOLEAN MODE) >0 
MATCH (p.T9Text) AGAINST ('+*NISNLS106B*' IN BOOLEAN MODE) >0 

用第一個查詢返回1行,但第二個查詢返回0行。

所以,有我的問題:在mysql全文搜索,我不能使用+ 測試表達式? 如果沒有,有沒有辦法做到這一點? (除了LIKE)

+0

你試過把它作爲'\ +'來轉義嗎? –

+1

我認爲問題出在'*'上 - 這個只能用在單詞的最後。 – Barmar

+0

@DannyBeckett MATCH(p.T9Text)反對('\ + * NISNLS106B *'BOOLEAN模式)'沒有任何返回 – makcura

回答

1

Boolean Full-Text Search docs;

星號用作截斷(或通配符)運算符。 與其他運營商不同,應該將追加給受影響的詞。如果它們以*運算符之前的單詞開頭,則單詞匹配。

換句話說,布爾搜索不支持使用*運算符的「contains」。

+0

謝謝Isaksson – makcura