मान लीजिए कि आप एक postgres 8.3 तालिका इस प्रकार करते हैं:आप पोस्टग्रेज़ में वाक्यांश-आधारित पूर्ण पाठ खोज कैसे करते हैं जो पूर्ण-पाठ अनुक्रमणिका का लाभ उठाता है?
CREATE TABLE t1 (body text, body_vector tsvector);
मैं पूरा टेक्स्ट सूचकांक (सार, जिन या दोनों tsvector स्तंभ पर) का उपयोग वाक्यांशों के लिए यह खोज करने के लिए सक्षम होना चाहते हैं। सबसे अच्छा कामकाज जिसे मैं ढूंढने में सक्षम हूं, पहले शब्दों (बुलियन और) दोनों पर पूर्ण पाठ खोज करना है और फिर वाक्यांश के लिए शरीर पर एक समान तुलना करना है। बेशक, यह किसी भी स्टेमिंग या वर्तनी-जांच को कैप्चर करने में विफल रहता है जो पोस्टग्रेस 'पूर्ण-पाठ खोज आपके लिए करता है। इस का एक उदाहरण है कि अगर मैं वाक्यांश 'w1 डब्ल्यू 2' के लिए खोज कर रहा हूँ है, मैं का उपयोग करेंगे:
SELECT * FROM t1 WHERE body_vector @@ 'w1 & w2'::tsquery AND body LIKE 'w1 w2';
वहाँ आप पर खोज कर का सहारा की जरूरत नहीं है, जहां यह करने के लिए एक रास्ता है पाठ कॉलम?
शायद मुझे कुछ पकड़ नहीं आया, लेकिन क्या इनपुट इनपुट स्ट्रिंग को सिंगल कोट्स के बीच खोजे गए वाक्यांश को शामिल करने की आवश्यकता नहीं है? कोई भी सामान्य रूप से इसका उपयोग कैसे कर सकता है, जब वाक्यांश ऑसर इनपुट से आता है, और दस्तावेज़ डेटाबेस कॉलम से आता है? –
यह अभी भी "वाक्यांश खोज" नहीं है। यह केवल तभी काम कर रहा है जब आपके सॉवेक्टर वाक्यांश 'न्यू यॉर्क' सिंगल-कोट्स में लपेटा गया है। – soyayix
हां दोनों फ़ंक्शन करता है - लेकिन अधिकांश मामलों में आपके tsvector स्ट्रिंग पर एकल-उद्धरण नहीं होंगे - यदि ऐसा होता है तो इसके लिए खोज वाक्यांश क्या है .. मेरे पास एक postgreSQL 9.4 है और आपके द्वारा काम की गई क्वेरी - यह न केवल 9.6 के लिए विशिष्ट। 'मैं दिल न्यू यॉर्क शहर' :: tsvector @@ 'new' :: tsquery, --true 'मैं दिल न्यू यॉर्क शहर' :: tsvector @@ 'नया और यॉर्क' :: tsquery, - सच 'मैं दिल न्यू यॉर्क शहर' :: tsvector @@ '' 'न्यू यॉर्क' ':: tsquery --false – soyayix