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

स्वत:पूर्ण फ़ील्ड के लिए समान UTF-8 स्ट्रिंग्स

आप pg_trgm . द्वारा प्रदान किए गए ऑपरेटर वर्ग का उपयोग नहीं कर रहे हैं मापांक। मैं इस तरह एक इंडेक्स बनाउंगा:

CREATE INDEX label_Lower_unaccent_trgm_idx
ON test_trgm USING gist (lower(unaccent_text(label)) gist_trgm_ops);

मूल रूप से, मेरे पास यहां एक जीआईएन इंडेक्स था, लेकिन बाद में मुझे पता चला कि एक जीआईएसटी शायद इस तरह की क्वेरी के लिए बेहतर अनुकूल है क्योंकि यह समानता के आधार पर मूल्यों को वापस कर सकता है। अधिक विवरण:

  • Postgresql:दो स्तंभों के बीच मिलान पैटर्न
  • PostgreSQL के साथ समान स्ट्रिंग्स को शीघ्रता से ढूँढना

इसका उपयोग करने में सक्षम होने के लिए आपकी क्वेरी को इंडेक्स एक्सप्रेशन से मेल खाना चाहिए।

SELECT label
FROM   the_table
WHERE  lower(unaccent_text(label)) % 'fil'
ORDER  BY similarity(label, 'fil') DESC -- it's ok to use original string here

हालांकि, % ऑपरेटर के अनुसार "फिलबर्ट" और "फाइल पाउडर" वास्तव में "फिल" के समान नहीं हैं। मुझे संदेह है कि आप वास्तव में क्या चाहते हैं:

SELECT label
FROM   the_table
WHERE  lower(unaccent_text(label)) ~~ '%fil%'
ORDER  BY similarity(label, 'fil') DESC -- it's ok to use original string here

यह खोज स्ट्रिंग वाले सभी स्ट्रिंग्स को ढूंढेगा, और % . के अनुसार सर्वोत्तम मिलानों को सॉर्ट करेगा पहले ऑपरेटर।

और रसदार हिस्सा:पोस्टग्रेएसक्यूएल 9.1 . के बाद से अभिव्यक्ति GIN या GiST अनुक्रमणिका का उपयोग कर सकती है ! मैं मैनुअल को pg_trgm moule पर उद्धृत करता हूं:

<ब्लॉकक्वॉट>

PostgreSQL 9.1 से शुरू होकर, ये अनुक्रमणिका प्रकार LIKE और ILIKE के लिए अनुक्रमणिका खोज का भी समर्थन करते हैं, उदाहरण के लिए

यदि आप वास्तव में % . का उपयोग करना चाहते थे ऑपरेटर:

क्या आपने सीमा कम करने . की कोशिश की है समानता ऑपरेटर के लिए % set_limit() . के साथ :

SELECT set_limit(0.1);

या उससे भी कम? डिफ़ॉल्ट 0.3 है। बस यह देखने के लिए कि क्या यह वह सीमा है जो अतिरिक्त मिलानों को फ़िल्टर करती है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. जेपीए और हाइबरनेट के साथ पोस्टग्रेएसक्यूएल एनम को कैसे मैप करें?

  2. आप सक्रिय उपयोगकर्ताओं को SQL के माध्यम से postgreSQL डेटाबेस से कैसे कनेक्ट कर सकते हैं?

  3. amazon ec2 . पर रिमोट पोस्टग्रेस्क्ल सर्वर से कनेक्ट करें

  4. समय क्षेत्र के साथ डेटा प्रकार टाइमस्टैम्प में समय क्षेत्र भंडारण

  5. पोस्टग्रेज:सिंगल रो को मल्टीपल रो में कन्वर्ट करें (अनपिवोट)