2013-02-23 111 views
1

我已經搜索了大量全文搜索的問題,並找不到解決此問題的方法。停止詞的全文布爾搜索返回空結果

我的命令如下:

SELECT * FROM t1 WHERE MATCH (c1,c2,c3) AGAINST (:keyStr IN BOOLEAN MODE)

如果:keyStr == '+蘋果*' 我得到的值返回。

如果:keyStr =='+ this *'我什麼也沒得到。

if:keyStr =='+ apple * + this *'我什麼也沒得到。

如果:keyStr =='+ apple * + chicken *'我得到返回的值。

'這','蘋果'和'雞'都在數據庫中,所有三個查詢都應返回非空結果。

我覺得當有一個停用詞輸入數據庫時​​會自動返回什麼。

回答

0

這是不可能的。 Boolean Full-Text Search Documentation明確指出,它不會被視爲禁用詞:如果與運營商截斷指定一個字

,它不是從布爾查詢剝離,哪怕是過短(從確定ft_min_word_len設置)或者停用詞。出現這種情況的原因是該詞不是太短或是停用詞,而是作爲前綴,必須以文字形式以前綴開頭的形式出現。

+0

笑我怎麼能顯示其實際發生的記錄? 我刪除了所有單詞中的'*',現在: '+ apple + this'returns values but'+ this'returns null – 2013-02-23 02:37:43

+0

@JoseCalderon您是否改變了配置中的任何內容? – Tchoupi 2013-02-23 02:40:42

+0

nope。我認爲當:keyStr ='+ this'時,mysql會忽略'+ this',並對空字符串進行全文搜索,空字符串返回null。 – 2013-02-23 02:42:46

1

我認爲問題在於'this'是一個停止詞,並在'this'周圍包含+和*。

原因是:keyStr == '+apple* +this*'需要蘋果*和這個*。但由於唯一匹配'this *'的是停用詞,因此您看不到結果。

你可以嘗試:keyStr == '+apple* this*'或插入有「thisorthat