2013-02-06 117 views
10

यह पहले से ही कई बार है कि Opencart के बुनियादी खोज पर्याप्त नहीं है लिखा गया था .. ठीक है, मैं इस मुद्दे में आए है)) वह शायद diacritics का उपयोग नहीं करेगा। तो वह "cucoriedka" लिखता है और कुछ भी नहीं मिला।Opencart परवाह किए बिना खोज उच्चारण

लेकिन, डेटाबेस में "čučoriedka" नाम का उत्पाद है और मैं इसे भी प्रदर्शित करना चाहता हूं, क्योंकि वह यही खोज रहा था।

क्या आपको पता है कि यह काम कैसे प्राप्त करें? बेहतर सरल!

+0

एक और कॉलम जोड़ें और फिर उत्पाद के नाम के लिए वैकल्पिक कीवर्ड जोड़ें। यह सिर्फ एक सुझाव है! –

+0

मैं इसके बारे में सोच रहा हूं, लेकिन शब्द के लिए कई संभावनाएं हैं। उदा अगर वह čučoriedka खोज रहा है, तो वह čucoriedka, cučoriedka, cucoriedka लिख सकता है ... मैं डेटाबेस में सभी संभव शब्दों को नहीं लिख सकता और न ही कुछ स्क्रिप्ट –

+0

अक्कम ने सही बात कहा ..खोज के दौरान आप इस और स्क्रिप्ट में एक और कॉलम जोड़ सकते हैं, आपको दोनों फ़ील्ड मानों से मेल खाना पड़ेगा। ताकि आपका खोज मूल्य या तो čučoriedka या अन्य मूल्य – jeeva

उत्तर

0

आप SOUNDEX() या SOUNDS LIKE MySQL के फ़ंक्शन का उपयोग कर सकते हैं।

ये कार्य ध्वन्यात्मक तुलना करते हैं।

ध्वनि के शुद्धता अंग्रेजी के अलावा अन्य के लिए संदिग्ध है। लेकिन, यह है कि हम उसके जैसे

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

SOUNDS LIKE भी इस्तेमाल किया जा सकता का उपयोग सुधार किया जा सकता।

SOUNDEX() और SOUNDS LIKE दोनों के संयोजन का उपयोग सटीकता में सुधार करेगा।

कृपया जानकारी के लिए MySQL प्रलेखन का उल्लेख या mysql-sounds-like-and-soundex

+1

'SOUNDEX' एक प्राचीन एल्गोरिदम (1 9 18 में पेटेंट) विशेष रूप से अंग्रेजी में उपनामों का पता लगाने के लिए ट्यून किया गया है। यह स्लोवाक उत्पाद नामों के लिए अच्छी तरह से काम कर सकता है या नहीं। –

+0

हां, आप बिल्कुल सही हैं। ध्वनि के सटीकता अन्य laguages ​​के लिए संदिग्ध है। लेकिन, अगर हम इसका उपयोग करते हैं तो इसका चयन किया जा सकता है जैसे 'ध्वनि' ('ball') = soundex ('boll') को दोहरी' – seahawk

+0

से चुनें, कॉलम संयोजन बदलने के लिए यह एक अच्छा विचार है? 'वैकल्पिक तालिका उत्पाद_डिस्क्रिप्शन बदलें नाम का नाम VARCHAR (255) वर्ण सेट सेट utf8 COLLATE utf8_general_ci नहीं है;' मैंने कहीं पढ़ा है कि कोलेक्शन बदलने से इंडेक्स का उपयोग नहीं किया जा सकता है। क्या ये सच है? – Adrian

5

मैं स्लोवाक से अनभिज्ञ हूँ, मैं माफी चाहता हूँ। लेकिन स्लोवाक collation utf8_slovak_cic से अलग के रूप में स्लोवाक पत्र č का इलाज करता है। (क्या कुलनाम Č सभी के साथ शुरू अपने टेलीफोन निर्देशिका में सीके साथ शुरू उन के बाद आया है? वे शायद है। MySQL के रचनाकारों निश्चित रूप से वे करते हैं लगता है।)

मिलान utf8_general_ci व्यवहार करता है č और c ही । यहां एक एसक्यूएल बेवकूफ यह सब दिखा रहा है। 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 'userInput' COLLATE utf8_general_ci = product_name 

लेकिन यह कॉलम संयोजन बदलने से खोजने के लिए धीमा हो जाएगा।