我有一張表格,用於插入圖像以及在所述圖像中找到的顏色名稱。顏色字符串看起來像「白色,黃色,橙色,黑色」。針對MySQL 50%自然搜索閾值的解決方法
由於我有很多這些,50%的閾值開始減少一些顏色,因爲它們出現在大多數行上。
表的全部要點是能夠按顏色進行搜索。有沒有人有解決方法,或者我應該放棄並去獅身人面像或類似的東西?重新編譯MySQL可能不是一種選擇。
我聽說有些人只是在表中添加虛擬行來繞過50%,但這聽起來非常絕望。
我有一張表格,用於插入圖像以及在所述圖像中找到的顏色名稱。顏色字符串看起來像「白色,黃色,橙色,黑色」。針對MySQL 50%自然搜索閾值的解決方法
由於我有很多這些,50%的閾值開始減少一些顏色,因爲它們出現在大多數行上。
表的全部要點是能夠按顏色進行搜索。有沒有人有解決方法,或者我應該放棄並去獅身人面像或類似的東西?重新編譯MySQL可能不是一種選擇。
我聽說有些人只是在表中添加虛擬行來繞過50%,但這聽起來非常絕望。
這不是全文搜索需要解決的問題。
相反,您需要一個子表,每個圖像的每個顏色一行。
顏色應該是顏色表的外鍵,所以您的子表實際上會變成圖像和顏色之間的多對多關係。
create table color (
id int not null primary key auto_increment,
name varchar64)
);
create table image_color (
image_id int references image(id),
color_id int reference color(id),
unique constraint (image_id, color_id)
) ;
然後指數的關係(和給它一個唯一約束元組(image_id,COLOR_ID)
然後查找所有圖片與特定的顏色:
select a.* from image a
join image_color b on (a.id = b.image_id)
join color c on (b.color_id = c.id)
where c.name = 'yellow';
該表的全部要點是能夠通過顏色進行搜索。是否有人有解決方法
是的,使用BOOLEAN MODE搜索,這些搜索不受50%閾值的影響,且不易預測。
但是,+1 tpdi的答案,我無法想象爲什麼你使用全文搜索,而不是簡單的連接表列出的顏色。這是一個簡單的是/否邏輯存儲問題,不需要拖動全文複雜的分詞,單詞排序,停用詞,太短的單詞(「紅色」不會被默認索引),最重要的是事實你必須使用令人討厭的舊MyISAM表來獲得該功能!
全文搜索一般很難,在MySQL中沒有特別好的實現。當你確實需要搜索大量文本中的單詞時,而不是作爲選擇的特徵,這應該是你最後的選擇。
布爾模式返回基本上毫無價值的結果。 – 2009-04-11 06:04:21
+1寫我想寫的東西,只有更快 – 2009-04-10 21:17:00