2010-10-12 13 views
6

से स्तंभ को कैसे बाहर मैं टेबल है:FTS3 तालिका खोज

CREATE VIRTUAL TABLE t USING FTS3(hidden, text1, text2) 

मैं उपयोगकर्ता टेक्स्ट 1 'और' टेक्स्ट 2 'कॉलम के ऊपर searh करने में सक्षम होना चाहते हैं, तो क्वेरी

SELECT docid FROM t WHERE t MATCH ? 
है

और संभव अनुरोध कर रहे हैं:

SELECT docid FROM t WHERE t MATCH 'foo' 
SELECT docid FROM t WHERE t MATCH 'text1:foo OR text2:bar' 

प्रश्न: मैं कैसे बाहर कर सकते हैं 'छुपा' खोज से स्तंभ, ताकि उपयोगकर्ता छिपा मूल्य द्वारा पंक्तियों नहीं मिल सकता है?

मैं अतिरिक्त जानकारी के साथ माध्यमिक तालिका में पंक्तियों को संदर्भित करने के लिए 'छुपा' कॉलम का उपयोग करने जा रहा हूं।

उत्तर

6

एक एफटीएस 3 तालिका को एक मुक्त 64 बिट पूर्णांक कॉलम मिलता है जिसे डॉकिड कहा जाता है जिसे अनुक्रमित नहीं किया जाता है। बस एक अलग तालिका में अतिरिक्त डेटा डालें जहां उस तालिका के लिए प्राथमिक कुंजी FTS3 तालिका के लिए डॉकिड जैसा ही है।

CREATE VIRTUAL TABLE t USING FTS4(uuid, document, notindexed=uuid); 

इस मैच से स्तंभ को बाहर निकाल देगा:

CREATE VIRTUAL TABLE t USING FTS3(text1, text2); 

CREATE TABLE additional (id INTEGER PRIMARY KEY, hidden VARCHAR); 

INSERT INTO t (docid, text1, text2) VALUES (243, 'foo', 'bar'); 
INSERT INTO additional VALUES (243, 'bas'); 

SELECT docid, text1, text2, hidden FROM t JOIN additional ON t.docid = additional.id WHERE t MATCH 'foo'; 
11

पुराने धागा है, लेकिन आप SQLite (> 3.8) के एक नए निर्माण उपयोग कर रहे हैं, अब आप notindexed विकल्प, जैसे उपयोग कर सकते हैं प्रश्नों।

मुझे यह भी SQLite 3.8 के अपने स्वयं के निर्माण को एम्बेड करके आईओएस पर काम कर रहा है।

Documentation for notindexed option

संबंधित मुद्दे