sql >> データベース >  >> RDS >> SQLite

SQLite全文検索入門

    概要 :このチュートリアルでは、FTS5仮想テーブルモジュールを使用してSQLite全文検索機能を使用する方法を学習します。

    SQLite全文検索の概要

    仮想テーブルはSQLiteのカスタム拡張機能です。仮想テーブルは通常のテーブルに似ています。仮想テーブルと通常のテーブルの違いは、データの取得元です。つまり、通常のテーブルを処理するときに、SQLiteはデータベースファイルにアクセスしてデータを取得します。ただし、仮想テーブルにアクセスすると、SQLiteはカスタムコードを呼び出してデータを取得します。カスタムコードには、複数のデータソースからのデータの取得などの特定のタスクを処理するロジックを指定できます。

    SQLiteで全文検索を使用するには、FTS5仮想テーブルモジュールを使用します。

    次のCREATEVIRTUAL TABLE ステートメントは、2つの列を持つ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テーブルを作成します 2列のtitle およびbody

    CREATE VIRTUAL TABLE posts 
    USING FTS5(title, body);
    Code language: SQL (Structured Query Language) (sql)

    通常のテーブルと同様に、 postにデータを挿入できます 次のような表:

    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)

    全文検索を使用したデータのクエリ

    これらの3つの方法のいずれかを使用して、FTS5テーブルに対してフルテキストクエリを実行できます。

    まず、 MATCHを使用します SELECTステートメントの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 同じです。

    検索結果を関連性の高いものから低いものへと並べ替えるには、次のようにORDERBY句を使用します。

    SELECT * 
    FROM posts 
    WHERE posts MATCH 'text' 
    ORDER BY rank;
    Code language: SQL (Structured Query Language) (sql)

    フルテキストクエリ構文の使用

    全文検索クエリはフレーズで構成され、各フレーズは1つ以上のトークンの順序付きリストです。次の例のように、「+」演算子を使用して2つのフレーズを連結できます。

    "learn SQLite"
    "learn + SQLite"
    Code language: SQL (Structured Query Language) (sql)

    FTS5は、フレーズの作成に使用されたトークンのシーケンスと一致するトークンのサブシーケンスがドキュメントに少なくとも1つ含まれている場合に、ドキュメントがフレーズと一致するかどうかを判断します。

    次のクエリは、検索語 Learn SQLiteに一致するすべてのドキュメントを返します。 :

    SELECT * 
    FROM posts 
    WHERE posts MATCH 'learn SQLite';
    Code language: SQL (Structured Query Language) (sql)

    プレフィックス検索

    アスタリスク(*)をプレフィックストークンとして使用できます。フレーズにアスタリスク(*)が含まれている場合、そのフレーズで始まるトークンを含むすべてのドキュメントと一致します。たとえば、search *は、検索、検索、検索などと一致します。次の例を参照してください。

    SELECT * 
    FROM posts
    WHERE posts = 'search*';Code language: SQL (Structured Query Language) (sql)

    ブール演算子

    ブール演算子を使用できます(例: NOT ) 、または 、または AND クエリを組み合わせる。

    • q1 AND q2:q1とq2の両方のクエリが一致する場合に一致します。
    • q1またはq2:クエリq1またはq2のいずれかが一致する場合に一致します。
    • q1 NOT 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テーブルのフルテキストクエリ内で使用できる3つの組み込み補助関数が用意されています。

    • bm25() 現在の一致の精度を表す値を返します。値が小さいほど、一致が良好であることを意味します。
    • heightlight() 補助関数は、指定されたマークアップで囲まれた検索語を含むテキストのコピーを返します。例:検索語
    • snippet() 含まれる検索用語の数を最大化するために、テキストの短いフラグメントを選択します。

    たとえば、次のクエリでは、highlight()関数を使用して、タグを使用して検索語を装飾します。

    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全文検索機能を使用する方法を学習しました。


    1. EBS12.2でWebポートを変更する方法

    2. 複数のJOINがクエリに適していない、またはオプティマイザの邪魔にならない理由

    3. WHERE句を使用して配列をクエリに渡す

    4. PostgreSQLでテーブルのリスト列名とデータ型を取得するにはどうすればよいですか?