2011-04-06 56 views
0

我想在字段上進行全文搜索以匹配字符串的特定部分。考慮一個長字符串保存數組值如201 ::: 1 ### 193 ::: 5 ### 193 ::: 6 ### 202 ::: 6。 ###分隔數組元素和:::分開鍵=> val。現在我對匹配的理解是,它可以匹配布爾模式中的字符串部分。但是當我做mysql全文MATCH,反對

`SELECT 
a.settings 
, MATCH(a.settings) AGAINST('201:::1') as relevance 
, b.maxrelevance 
, (MATCH(a.settings) AGAINST('201:::1'))/b.maxrelevance*100 as relevanceperc 
FROM 
users_profile a 
, (SELECT MAX(MATCH(settings) AGAINST('201:::1')) as maxrelevance FROM users_profile LIMIT 1) b 
WHERE 
MATCH(a.settings) AGAINST('201:::1') 
ORDER BY 
relevance DESC;` 

表例如

CREATE TABLE users_profile
id INT(11)默認爲NULL線的東西,
profile文本,
views INT(11)默認爲NULL ,
friends_list text,
settings text,
points INT(11)默認NULL,
KEY idid),
全文鍵settingssettings
)ENGINE = MyISAM的默認字符集= UTF8;

我得到零結果。任何想法都歡迎。

+0

顯示錶例子,並標出你whant被選定的字段,請。 – 2011-04-06 06:30:17

+0

我已更新表結構。只有字段設置將被搜索 – mbouclas 2011-04-06 06:44:14

+0

我認爲「:」是爲布爾搜索保留的。看看:http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_ft_boolean_syntax並嘗試修改此設置。這可能有幫助。也可以看看本頁面中以「ft_」開頭的所有其他設置。 – eisberg 2011-04-06 06:47:09

回答

1

MySQL全文索引旨在存儲自然語言單詞。您的樣品

201 ::: 1 ### 193 ::: 5 ### 193 ::: 6 ### 202 ::: 6。 ###

僅由數字組成,如201,1,192 ......因爲很短的單詞很少有用,所以ft_min_word_len通常設置爲4,這意味着沒有數字是偶數該指數。

全文不是解決這個問題的方法。


如果你想一切都是爲了計數表達式列多少次存在,只是用

(length(a.setting) - length(replace(a.setting,'201:::1','')))/length('201:::1') 
+0

你認爲正則表達式會起作用嗎? – mbouclas 2011-04-07 07:30:22

+0

是的,REGEX或LIKE,因爲有一個單詞。儘管它會很慢。 – RichardTheKiwi 2011-04-07 07:32:20

+0

問題是正則表達式,據我測試,不能給我一個匹配每行,這是什麼是最重要的位在這裏 – mbouclas 2011-04-07 07:41:56