sql - एफटीएस गैर-लैटिन:टेक्स्ट-सर्च क्वेरी में केवल स्टॉप शब्द होते हैं या इसमें lexemes नहीं होते हैं, उपेक्षा



postgresql utf-8 full-text-search chinese-locale (1)

उत्कृष्ट क्रेग रिंगर की पोस्ट और डेपेज़ के ब्लॉग पोस्ट के अलावा, यदि आप एक लेनदेन के अंदर तैयार-कथन सम्मिलन का उपयोग करके ओडीबीसी ( psqlodbc ) इंटरफ़ेस के माध्यम से अपने आवेषण को तेज़ करना चाहते हैं, तो कुछ अतिरिक्त चीजें हैं जिन्हें आपको बनाने के लिए करना है तेजी से काम करें:

  1. कनेक्शन स्ट्रिंग में Protocol=-1 निर्दिष्ट करके "लेनदेन" के स्तर-ऑफ-रोलबैक-ऑन-त्रुटियों को सेट करें। डिफ़ॉल्ट रूप से psqlodbc "स्टेटमेंट" स्तर का उपयोग करता है, जो पूरे लेनदेन की बजाय प्रत्येक कथन के लिए एक बचत करता है, जिससे आवेषण धीमा हो जाता है।
  2. कनेक्शन स्ट्रिंग में UseServerSidePrepare=1 निर्दिष्ट करके सर्वर-साइड तैयार कथन का उपयोग करें। इस विकल्प के बिना ग्राहक डालने वाली प्रत्येक पंक्ति के साथ पूरे सम्मिलन कथन भेजता है।
  3. SQLSetConnectAttr(conn, SQL_ATTR_AUTOCOMMIT, reinterpret_cast<SQLPOINTER>(SQL_AUTOCOMMIT_OFF), 0); का उपयोग करके प्रत्येक कथन पर ऑटो-प्रतिबद्ध अक्षम करें SQLSetConnectAttr(conn, SQL_ATTR_AUTOCOMMIT, reinterpret_cast<SQLPOINTER>(SQL_AUTOCOMMIT_OFF), 0);
  4. एक बार सभी पंक्तियों को डालने के बाद, SQLEndTran(SQL_HANDLE_DBC, conn, SQL_COMMIT); का उपयोग करके लेनदेन प्रतिबद्ध करें SQLEndTran(SQL_HANDLE_DBC, conn, SQL_COMMIT); । लेनदेन को स्पष्ट रूप से खोलने की कोई आवश्यकता नहीं है।

दुर्भाग्यवश, psqlodbc "अपरिवर्तित" SQLBulkOperations को अपरिपक्व डालने वाले बयानों की एक श्रृंखला जारी करके "लागू SQLBulkOperations है, ताकि सबसे तेज़ डालने के लिए उपरोक्त चरणों को मैन्युअल रूप से कोड करने की आवश्यकता हो।

मैं एक पोस्टग्रेज़ ( 9.6.1 ) एफटीएस एक्सटेंशन जेएचपीर्स का उपयोग करके चीनी अक्षरों के साथ पूर्ण पाठ खोज का उपयोग करने की कोशिश कर रहा हूं।

यहां कुछ उदाहरणों के बाद, मैं अपने title कॉलम को चुनना चाहता था और शीर्षक to_tsquery साथ to_tsquery :

select title from table1 where 
to_tsvector('testzhcfg',title) @@ to_tsquery('testzhcfg','你');

टेबल 1 स्कीमा:

id  | title   
--------------
1   |      
2   | 你好    
3   | 我比你好 
4   | 谢谢    
5   | 淘气    

यह देता है:

NOTICE:  text-search query contains only stop words or doesn't contain lexemes, ignored
 title 
-------
(0 rows)

मुझे उम्मीद है कि परिणाम:

rows: 

title   
-----
     
你好    
我比你好 

चूंकि आप प्रत्येक में मौजूद हैं

यह आलेख इस मुद्दे के बारे में बात करता है , और यूटीएफ 8 एन्कोडेड डीबी सुनिश्चित करने की सिफारिश करता है। मैंने सुनिश्चित किया है कि तालिका UTF8 है:

mydatabase=# \l
                                             List of databases
      Name      |     Owner      | Encoding |   Collate   |    Ctype    |         Access privileges         
----------------+----------------+----------+-------------+-------------+-----------------------------------
 mydatabase     | myname         | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/myname               +
                |                |          |             |             | myname=CTc/myname

एफटीएस को गैर-लैटिन, विशेष रूप से चीनी, वर्णों के साथ काम करने की अनुमति देने के लिए अन्य कौन से विन्यास किए जाने की आवश्यकता है?





sql postgresql utf-8 full-text-search chinese-locale