PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

हरोकू पर रेल 3.1 में उच्चारण असंवेदनशील खोज को पोस्टग्रेज करता है

गरीबों का समाधान

यदि आप कोई फ़ंक्शन बनाने में सक्षम हैं, तो आप इसका उपयोग कर सकते हैं। मैंने सूची को यहां से संकलित किया है। और समय के साथ इसमें जोड़ा गया। यह काफी पूर्ण है। आप कुछ वर्णों को हटाना भी चाह सकते हैं:

CREATE OR REPLACE FUNCTION lower_unaccent(text)
  RETURNS text AS
$func$
SELECT lower(translate($1
     , '¹²³áàâãäåāăąÀÁÂÃÄÅĀĂĄÆćčç©ĆČÇĐÐèéêёëēĕėęěÈÊËЁĒĔĖĘĚ€ğĞıìíîïìĩīĭÌÍÎÏЇÌĨĪĬłŁńňñŃŇÑòóôõöōŏőøÒÓÔÕÖŌŎŐØŒř®ŘšşșߊŞȘùúûüũūŭůÙÚÛÜŨŪŬŮýÿÝŸžżźŽŻŹ'
     , '123aaaaaaaaaaaaaaaaaaacccccccddeeeeeeeeeeeeeeeeeeeeggiiiiiiiiiiiiiiiiiillnnnnnnooooooooooooooooooorrrsssssssuuuuuuuuuuuuuuuuyyyyzzzzzz'
     ));
$func$ LANGUAGE sql IMMUTABLE;

आपकी क्वेरी इस तरह काम करनी चाहिए:

find(:all, :conditions => ["lower_unaccent(name) LIKE ?", "%#{search.downcase}%"])

बाएं-एंकर वाली खोजों के लिए, आप फ़ंक्शन पर बहुत . के लिए एक अनुक्रमणिका का उपयोग कर सकते हैं तेज़ परिणाम:

CREATE INDEX tbl_name_lower_unaccent_idx
  ON fest (lower_unaccent(name) text_pattern_ops);

जैसे प्रश्नों के लिए:

SELECT * FROM tbl WHERE (lower_unaccent(name)) ~~ 'bob%'

उचित समाधान

PostgreSQL 9.1+ . में , आवश्यक विशेषाधिकारों के साथ, आप बस कर सकते हैं:

CREATE EXTENSION unaccent;

जो एक फ़ंक्शन प्रदान करता है unaccent() , आपको जो चाहिए वह करना (lower() . को छोड़कर , बस जरूरत पड़ने पर इसका अतिरिक्त उपयोग करें)। इस एक्सटेंशन के बारे में मैनुअल पढ़ें .
PostgreSQL 9.0 के लिए भी उपलब्ध है लेकिन CREATE EXTENSION सिंटेक्स 9.1 में नया है।

उच्चारण और अनुक्रमणिका के बारे में अधिक जानकारी:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Windows10 पर PostGis में OSM फ़ाइल आयात करें

  2. एक ही क्वेरी में अलग-अलग पैरा के साथ कई जॉइन कैसे निष्पादित करें?

  3. वस्तुओं की संपत्ति द्वारा किसी जेसन या जेसनबी मान के अंदर किसी सरणी में ऑब्जेक्ट्स को कैसे सॉर्ट करें?

  4. किसी भी कारण से हेरोकू पर पोस्टग्रेएसक्यूएल की अंतर्निहित पूर्ण पाठ खोज का उपयोग नहीं किया जाता है?

  5. mySQL से array_agg () को group_concat () की तरह कैसे काम करें?