2013-07-17 37 views
0

我有一個填充了某些值的表格,例如布爾全文搜索排除短語AB-CD,例如-「A B C D」?

| CODE | NAME  | NB: THIS IS A VERY BASIC EXAMPLE 
| zygnc | oscar alpha | 
| ab-cd | delta tiger | 
| fsdys | delta bravo | 

使用MySQL全文布爾搜索我想要搜索該表包含「三角洲」的所有名稱,但不包括第一個結果其獨特的代碼「AB-CD的基本。此代碼包含一個減號,這是一個要求,並將其刪除是不可能的。

所以下面的查詢「應該」在我的腦海適應這樣的:

SELECT code, name 
FROM items 
WHERE MATCH (code, name) 
AGAINST ('delta -"ab-cd"' IN BOOLEAN MODE) 

然而,運行此查詢會在沒有產品的預期結果的結果確實還包含一行是代碼意味着被排除在外,'ab-cd'。

這兩個表的聯盟設置爲utf8_bin。

的的ft_min_word_len值設置爲4

可能有人可能認爲這種現象的一個原因,我認爲它可能將字符串作爲兩個單獨的值,例如「-ab」,「-cd」和ft_min_word_len的值是4,這兩個字符串都不能產生任何結果?

我認爲使用封裝「」,將意味着第二個減號將被視爲文字,但它似乎並非如此。也許這與我沒有意識到的聯盟表現有關係?

無論如何,任何建議/意見/輸入/反饋/方向將不勝感激,謝謝!

回答

1

您需要在my.cnf文件中更改變量ft_min_word_len的值。

默認情況下,ft_min_word_len的值是3.一旦更改變量,您需要重新啓動服務器。

這裏「ab-cd」被當作「ab」和「cd」兩個單詞對待。所以最小的單詞長度與單詞不匹配。

+0

目前,我們的託管服務提供商不能修改此值。在任何情況下,如果值設置爲3,「ab」將是2的值,因此不會產生任何結果?有沒有辦法強制MySQL將其識別爲包含5個值的文字字符串? –

+1

我們不能將此變量用作動態變量。請參閱http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html – Amernath

+0

我不認爲這裏的ft_min_word_len值有任何問題。我試過這種情況,它對我來說是完美的。 – Pramod

相關問題