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

फ्लैट जेसनबी सरणी के तत्वों पर क्वेरी पसंद करें

SELECT *
FROM   posts p
WHERE  EXISTS (
   SELECT FROM jsonb_array_elements_text(p.tags) tag
   WHERE  tag LIKE '%TAG%'
   );

संबंधित, स्पष्टीकरण के साथ:

  • किसी पैटर्न से मेल खाने वाले मान वाले ऑब्जेक्ट के लिए JSON सरणी खोजें

या @? . के साथ आसान पोस्टग्रेज 12 के बाद से ऑपरेटर ने SQL/JSON को लागू किया:

SELECT *
--     optional to show the matching item:
--   , jsonb_path_query_first(tags, '$[*] ? (@ like_regex "^ tag" flag "i")')
FROM   posts
WHERE  tags @? '$[*] ? (@ like_regex "TAG")';

ऑपरेटर @? फ़ंक्शन के चारों ओर केवल एक आवरण है jsonb_path_exists() . तो यह बराबर है:

...
WHERE  jsonb_path_exists(tags, '$[*] ? (@ like_regex "TAG")');

न तो सूचकांक समर्थन है। (@? . के लिए जोड़ा जा सकता है ऑपरेटर बाद में, लेकिन अभी तक पीजी 13 में नहीं है)। तो वे प्रश्न बड़ी तालिकाओं के लिए धीमे हैं। एक सामान्यीकृत डिज़ाइन, जैसा कि लॉरेन्ज़ ने पहले ही सुझाया था, बेहतर होगा - एक ट्रिग्राम इंडेक्स के साथ:

  • PostgreSQL क्वेरी प्रदर्शन विविधताओं की तरह

केवल उपसर्ग मिलान . के लिए (LIKE 'TAG%' , कोई अग्रणी वाइल्डकार्ड नहीं), आप इसे पूर्ण पाठ अनुक्रमणिका . के साथ काम कर सकते हैं :

CREATE INDEX posts_tags_fts_gin_idx ON posts USING GIN (to_tsvector('simple', tags));

और एक मेल खाने वाली क्वेरी:

SELECT *
FROM   posts p
WHERE  to_tsvector('simple', tags)  @@ 'TAG:*'::tsquery

या english का उपयोग करें simple . के बजाय शब्दकोश (या जो भी आपके मामले में फिट बैठता है) यदि आप प्राकृतिक अंग्रेजी भाषा के लिए स्टेम करना चाहते हैं।

to_tsvector(json(b)) आवश्यकता है 10 पोस्ट करें या बाद में।

संबंधित:

  • GIN अनुक्रमित TSVECTOR कॉलम से आंशिक मिलान प्राप्त करें
  • PostgreSQL में LIKE, SIMILAR TO या रेगुलर एक्सप्रेशन से मिलान करने वाला पैटर्न



  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. मॉडलिंग और सामान्य करते समय अशक्त मूल्यों के साथ क्या करें?

  3. पोस्टग्रेज - लापता डेटा के लिए 0 गिनती के साथ पंक्तियों को कैसे वापस करें?

  4. PhpPgAdmin से sql इंसर्ट क्वेरी सिंटैक्स त्रुटि पोस्टग्रेज करता है

  5. PostgreSQL:पूर्ण पाठ खोज - आंशिक शब्दों की खोज कैसे करें?