2010-11-01 49 views
2

以下兩個查詢返回相同的(預期的)結果當我查詢我的數據庫:MySQL的MATCH ... AGAINST有時會找到答案,有時不

SELECT * FROM articles 
WHERE content LIKE '%Euskaldunak%' 

SELECT * FROM articles 
WHERE MATCH (content) AGAINST ('+"Euskaldunak"' IN BOOLEAN MODE) 

在內容字段中的文本,它的搜索看起來是這樣的:「......這些Euskaldunak,或新人......」

然而,在同一個表下面的查詢返回預期的一個結果:

SELECT * FROM articles 
WHERE content LIKE '%PCC%' 

而下面的查詢將返回空的結果:

SELECT * FROM articles 
WHERE MATCH (content) AGAINST ('+"PCC"' IN BOOLEAN MODE) 

在這一結果符合內容領域的文字是這樣的:「......波特蘭社區學院(PCC)是最大的......」

我想不通爲什麼尋找「Euskaldunak」與MATCH一起工作......反對語法,但「PCC」不是。有沒有人看到我沒有看到的東西?

(另外:「PCC」是不是這個領域的常用短語 - 沒有其他行包含單詞,所以自然語言搜索不應該被排除它)

回答

3

您的全文文本的最小字長可能設得太高。我認爲默認值是4,這將解釋你所看到的。如果您希望無論長度如何都索引所有單詞,請將其設置爲1。

運行此查詢:

show variables like 'ft_min_word_len'; 

如果數值大於3,你想擊中的話比短,編輯您的/etc/my.cnf,並添加或更新這條線在[mysqld]使用值適合您的應用程序部分:

ft_min_word_len = 1 

然後重啓MySQL和重建全文索引,你應該準備就緒。

+0

這就是它!不幸的是我不能自己改變這個變量,我不得不要求改變它,所以我還沒有嘗試過這個解決方案。但事實上,這個設置是4,而不是3。 – Elizabeth 2010-11-01 21:24:02

3

有兩件事我能想到的的馬上。首先是你的ft_min_word_len值設置爲3個以上的字符。任何小於ft_min_word_len長度的「單詞」都不會被索引。

第二個是,超過50%的記錄包含'PCC'字符串。與超過50%的記錄匹配的全文搜索被認爲是不相關的,並且不會返回任何內容。

全文索引與常規字符串索引有不同的規則。例如,有一個停用詞表,所以某些常用詞,如,,和,不會被索引。