2013-02-06 64 views
10

它已經寫了很多次已經是Opencart的基本搜索是不夠好..好吧,我已經碰到這個問題))他可能不會使用變音符號。所以他/她寫下「cucoriedka」,什麼都沒發現。Opencart的搜索無論口音

但是,在數據庫中有名爲「čučoriedka」的產品,我也希望它也顯示,因爲這正是他正在尋找的。

你知道如何得到這份工作嗎?越簡單越好!

+0

添加另一列,然後爲產品名稱添加替代關鍵字。這只是一個建議! – 2013-02-06 22:32:44

+0

我一直在想它,但這個詞有很多可能性。 F.E.如果他找到了čučoriedka,他可能會寫čucoriedka,cučoriedka,cucoriedka ...我不能寫所有可能的單詞到數據庫中,也不能寫一些腳本 –

+0

akam說的是正確的。您可以在搜索時爲此和腳本添加一列,並且必須匹配兩個字段值。所以你的搜索值將匹配čučoriedka或其他值 – jeeva

回答

0

您可以使用SOUNDEX()SOUNDS LIKE函數MySQL。

這些函數比較語音。

soundex的準確性除了英語以外是值得懷疑的。但是,如果像

select soundex('ball')=soundex('boll') from dual 

SOUNDS LIKE也可以使用它可以被改進。

使用SOUNDEX()SOUNDS LIKE的組合將提高準確性。

請參閱MySQL文檔的細節或mysql-sounds-like-and-soundex

+1

'SOUNDEX'是一種古老的算法(1918年獲得專利),專門用於查找英文姓氏。斯洛伐克產品名稱可能適用也可能不適用。 –

+0

是的,你是絕對正確的。 soundex的準確性對其他語言的質疑值得懷疑。 但是,如果我們將它用作'select'soundex('ball')= soundex('boll')from' – seahawk

+0

這是一個好主意,可以更改列整理嗎? 'ALTER TABLE product_description CHANGE name name VARCHAR(255)CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;'我在某處讀取更改排序規則可能導致不再使用索引的地方。這是真的? – Adrian

5

我無知斯洛伐克,我很抱歉。但斯洛伐克整理utf8_slovak_ci將斯洛伐克文č視爲不同於c。 (做姓氏開頭Č都來後與C在你的電話簿開始?他們可能做的。MySQL的的創造者當然認爲他們這樣做。)

的整理utf8_general_ci對待čc相同。這是一個演示這一切的sql小提琴。 http://sqlfiddle.com/#!9/46c0e/1/0

如果更改包含產品名稱的列的排序規則爲utf8_general_ci,那麼您將獲得更加便於搜索的表格。假設您的表格名爲product,並且名稱中的列名爲product_name。然後,這個SQL數據定義語句將根據需要轉換該列。您應該查看列的實際數據類型,而不是像本示例中那樣使用varchar(nnn)

alter table product modify product_name varchar(nnn) collate utf8_general_ci 

如果你不能改變表,那麼你可以改變你的WHERE子句,像這樣工作,明確指定排序規則。

WHERE 'userInput' COLLATE utf8_general_ci = product_name 

但是這會比改變列整理慢。