सारांश :इस ट्यूटोरियल में, आप सीखेंगे कि FTS5 वर्चुअल टेबल मॉड्यूल का उपयोग करके SQLite पूर्ण-पाठ खोज सुविधा का उपयोग कैसे करें।
SQLite पूर्ण-पाठ खोज का परिचय
वर्चुअल टेबल SQLite के लिए एक कस्टम एक्सटेंशन है। एक वर्चुअल टेबल एक सामान्य टेबल की तरह होती है। वर्चुअल टेबल और सामान्य टेबल के बीच का अंतर वह जगह है जहां से डेटा आता है यानी, जब आप एक सामान्य टेबल को प्रोसेस करते हैं, तो SQLite डेटा को पुनः प्राप्त करने के लिए डेटाबेस फाइल तक पहुंचता है। हालांकि, जब आप वर्चुअल टेबल तक पहुंचते हैं, तो SQLite डेटा प्राप्त करने के लिए कस्टम कोड को कॉल करता है। कई डेटा स्रोतों से डेटा प्राप्त करने जैसे कुछ कार्यों को संभालने के लिए कस्टम कोड में निर्दिष्ट तर्क हो सकते हैं।
SQLite में पूर्ण-पाठ खोज का उपयोग करने के लिए, आप FTS5 वर्चुअल टेबल मॉड्यूल का उपयोग करते हैं।
निम्नलिखित CREATE VIRTUAL TABLE
कथन दो स्तंभों के साथ एक FTS5 तालिका बनाता है:
CREATE VIRTUAL TABLE table_name
USING FTS5(column1,column2...);
Code language: SQL (Structured Query Language) (sql)
ध्यान दें कि आप प्रकार, प्रतिबंध या PRIMARY KEY
नहीं जोड़ सकते हैं CREATE VIRTUAL TABLE
. में घोषणा FTS5 तालिका बनाने के लिए कथन। यदि आप ऐसा करते हैं, तो SQLite एक त्रुटि जारी करेगा।
प्राथमिक कुंजी कॉलम निर्दिष्ट किए बिना सामान्य तालिका बनाने की तरह, SQLite एक अंतर्निहित rowid
जोड़ता है FTS5 तालिका में कॉलम।
निम्न उदाहरण posts
. नामक एक FTS5 तालिका बनाता है दो कॉलम के साथ title
और body
।
CREATE VIRTUAL TABLE posts
USING FTS5(title, body);
Code language: SQL (Structured Query Language) (sql)
एक सामान्य तालिका के समान, आप posts
. में डेटा सम्मिलित कर सकते हैं तालिका इस प्रकार है:
INSERT INTO posts(title,body)
VALUES('Learn SQlite FTS5','This tutorial teaches you how to perform full-text search in SQLite using FTS5'),
('Advanced SQlite Full-text Search','Show you some advanced techniques in SQLite full-text searching'),
('SQLite Tutorial','Help you learn SQLite quickly and effectively');
Code language: SQL (Structured Query Language) (sql)
और इसके खिलाफ क्वेरी डेटा:
SELECT * FROM posts;
Code language: SQL (Structured Query Language) (sql)
पूर्ण-पाठ खोज का उपयोग करके डेटा क्वेरी करना
आप इन तीन तरीकों में से किसी एक का उपयोग करके FTS5 तालिका के विरुद्ध एक पूर्ण-पाठ क्वेरी निष्पादित कर सकते हैं।
सबसे पहले, MATCH
. का उपयोग करें सेलेक्ट स्टेटमेंट के WHERE क्लॉज में ऑपरेटर। उदाहरण के लिए, fts5
. शब्द वाली सभी पंक्तियां प्राप्त करने के लिए , आप निम्न क्वेरी का उपयोग करें:
SELECT *
FROM posts
WHERE posts MATCH 'fts5';
Code language: SQL (Structured Query Language) (sql)
दूसरा, एक समान (=
.) का उपयोग करें ) ऑपरेटर WHERE
. में SELECT
. का खंड बयान। निम्नलिखित कथन ऊपर दिए गए कथन के समान परिणाम देता है:
SELECT *
FROM posts
WHERE posts = 'fts5';
Code language: SQL (Structured Query Language) (sql)
तीसरा, एक टेबल-वैल्यू फ़ंक्शन सिंटैक्स का उपयोग करें। इस तरह, आप पहली तालिका तर्क के रूप में खोज शब्द का उपयोग करते हैं:
SELECT *
FROM posts('fts5');
Code language: SQL (Structured Query Language) (sql)
डिफ़ॉल्ट रूप से, FTS5 केस-स्वतंत्र है। यह fts5
. शब्दों का व्यवहार करता है FTS5
और Fts5
वही।
खोज परिणामों को सबसे कम से कम प्रासंगिक से क्रमबद्ध करने के लिए, आप ORDER BY क्लॉज का उपयोग निम्नानुसार करते हैं:
SELECT *
FROM posts
WHERE posts MATCH 'text'
ORDER BY rank;
Code language: SQL (Structured Query Language) (sql)
पूर्ण-पाठ क्वेरी सिंटैक्स का उपयोग करना
एक पूर्ण-पाठ खोज क्वेरी वाक्यांशों से बनी होती है, जहां प्रत्येक वाक्यांश एक या अधिक टोकन की एक क्रमबद्ध सूची होती है। आप निम्न उदाहरण के रूप में दो वाक्यांशों को जोड़ने के लिए "+" ऑपरेटर का उपयोग कर सकते हैं:
"learn SQLite"
"learn + SQLite"
Code language: SQL (Structured Query Language) (sql)
FTS5 यह निर्धारित करता है कि दस्तावेज़ एक वाक्यांश से मेल खाता है या नहीं यदि दस्तावेज़ में कम से कम एक बाद के टोकन हैं जो वाक्यांश के निर्माण के लिए उपयोग किए गए टोकन के अनुक्रम से मेल खाते हैं।
निम्न क्वेरी खोज शब्द से मेल खाने वाले सभी दस्तावेज़ लौटाती है Learn SQLite
:
SELECT *
FROM posts
WHERE posts MATCH 'learn SQLite';
Code language: SQL (Structured Query Language) (sql)
उपसर्ग खोजें
आप तारांकन चिह्न (*) को उपसर्ग टोकन के रूप में उपयोग कर सकते हैं। जब किसी वाक्यांश में तारक (*) होता है, तो यह किसी भी दस्तावेज़ से मेल खाएगा जिसमें वाक्यांश से शुरू होने वाला टोकन होता है। उदाहरण के लिए, खोज* खोज, खोज, खोजों आदि से मेल खाता है। निम्न उदाहरण देखें:
SELECT *
FROM posts
WHERE posts = 'search*';
Code language: SQL (Structured Query Language) (sql)
बूलियन ऑपरेटर
आप बूलियन ऑपरेटर का उपयोग कर सकते हैं जैसे, NOT
, OR
, या AND
प्रश्नों को संयोजित करने के लिए।
- q1 और q2:यदि दोनों q1 और q2 क्वेरी मेल खाते हैं तो मेल खाता है।
- q1 OR q2:यदि क्वेरी q1 या q2 में से कोई भी मेल खाता है तो मेल खाता है।
- q1 नहीं q2:यदि क्वेरी q1 मेल खाती है और q2 मेल नहीं खाती है तो मेल खाता है।
उदाहरण के लिए, learn
. से मेल खाने वाले दस्तावेज़ प्राप्त करने के लिए वाक्यांश लेकिन FTS5
से मेल नहीं खाता वाक्यांश, आप NOT
. का उपयोग करते हैं ऑपरेटर इस प्रकार है:
SELECT *
FROM posts
WHERE posts MATCH 'learn NOT text';
Code language: SQL (Structured Query Language) (sql)
किसी भी वाक्यांश से मेल खाने वाले दस्तावेज़ों को खोजने के लिए learn
या text
, आप OR
. का उपयोग करते हैं निम्नलिखित उदाहरण के रूप में ऑपरेटर:
SELECT *
FROM posts
WHERE posts MATCH 'learn OR text';
Code language: SQL (Structured Query Language) (sql)
SQLite और खोज दोनों से मेल खाने वाले दस्तावेज़ों को खोजने के लिए, आप AND
. का उपयोग करते हैं ऑपरेटर जैसा कि नीचे दिखाया गया है:
SELECT *
FROM posts
WHERE posts MATCH 'sqlite AND searching';
Code language: SQL (Structured Query Language) (sql)
ऑपरेटर प्राथमिकता को बदलने के लिए, आप समूह अभिव्यक्तियों के लिए कोष्ठक का उपयोग करते हैं। उदाहरण के लिए:
SELECT *
FROM posts
WHERE posts MATCH 'search AND sqlite OR help';
Code language: SQL (Structured Query Language) (sql)
कथन search
. से मेल खाने वाले दस्तावेज़ लौटाता है और sqlite
या help
. search
. से मेल खाने वाले दस्तावेज़ ढूंढने के लिए और या तो sqlite
या help
, आप निम्न प्रकार से कोष्ठक का उपयोग करते हैं:
SELECT *
FROM posts
WHERE posts MATCH 'search AND (sqlite OR help)';
Code language: SQL (Structured Query Language) (sql)
अंतर्निहित सहायक कार्य
SQLite तीन अंतर्निहित सहायक कार्य प्रदान करता है जिनका उपयोग FTS5 तालिका पर पूर्ण-पाठ प्रश्नों के भीतर किया जा सकता है।
- द
bm25()
एक मान लौटाता है जो वर्तमान मिलान की सटीकता का प्रतिनिधित्व करता है, कम मान का अर्थ है बेहतर मिलान। highlight()
सहायक फ़ंक्शन एक निर्दिष्ट मार्कअप से घिरे खोज शब्दों के साथ पाठ की एक प्रति देता है जैसे,खोज शब्द- द
snippet()
इसमें शामिल खोज शब्दों की संख्या को अधिकतम करने के लिए पाठ का एक छोटा टुकड़ा चुनता है।
उदाहरण के लिए, निम्न क्वेरी टैग: का उपयोग करके खोज शब्दों को सजाने के लिए हाइलाइट() फ़ंक्शन का उपयोग करती है।
SELECT highlight(posts,0, '<b>', '</b>') title,
highlight(posts,1, '<b>', '</b>') body
FROM posts
WHERE posts MATCH 'SQLite'
ORDER BY rank;
Code language: SQL (Structured Query Language) (sql)
इस ट्यूटोरियल में, आपने सीखा कि FTS5 वर्चुअल टेबल मॉड्यूल के माध्यम से SQLite पूर्ण-पाठ खोज सुविधाओं का उपयोग कैसे करें।