ここでは、実際に検索を実行した時、Ludiaではどのような検索条件を指定することができるのかを見ていきます。まずはその準備として、psqlコマンドでPostgreSQLを起動し、以下のようにテスト用のテーブルとインデックスを作成します。
# CREATE TABLE tbl (txt text);
CREATE TABLE
# CREATE INDEX idx ON tbl USING fulltext (txt);
CREATE INDEX
# INSERT INTO tbl VALUES ('こんにちは');
INSERT 0 1
# INSERT INTO tbl VALUES ('さようなら');
INSERT 0 1
# INSERT INTO tbl VALUES ('こんにちは、さようなら');
INSERT 0 1
Ludiaの全文検索機能では、次のように「@@演算子」で全文検索クエリを指定することができます。これを基に、例をあげながら検索の種類を見ていきます。
SELECT txt FROM tbl WHERE txt @@ '全文検索クエリ';
次に示すのは、Webサイト上の検索でもよく使われる検索したい単語を空白で区切る方法です。この方法では指定された単語のうち、どれかを含む行が取得できます。
# SELECT txt FROM tbl WHERE txt @@ 'こんにちは さようなら';
txt
------------------------
こんにちは、さようなら
こんにちは
さようなら
(3 rows)
これは、いわゆる「OR検索」と呼ばれる検索方法です。全文検索クエリでは演算子を利用して細かい指定を行うことができますが、演算子を省略した場合のデフォルトの動作はOR検索になっています。実際、以下のように検索条件を指定しても、上記と同じことになります。
# SELECT txt FROM tbl WHERE txt @@ 'こんにちは OR さようなら';
また、次のように「+演算子」を指定すると、両方の単語を含む行のみを取り出すことができます。
# SELECT txt FROM tbl WHERE txt 'こんにちは + さようなら';
txt
------------------------
こんにちは、さようなら
(1 row)
逆に、「-演算子」で指定した単語を含む行を取り除くことができます。
# SELECT txt FROM tbl WHERE txt @@ 'こんにちは - さようなら';
txt
------------
こんにちは
(1 row)
ここで注意が必要なのは、+演算子や-演算子を使用した場合、内部で行われる処理は検索ではなく検索結果からの除外だという点です。この例では、次に示す表の通りの動作をすることになります。よって、+演算子や-演算子を検索条件の最初にもってくることはできません(指定したとしても無視されます)。
- 「こんにちは + さようなら」での場合
- 「こんにちは」で検索して得られた結果から「さようなら」を含まないものを除外する。
- 「こんにちは - さようなら」の場合
- 「こんにちは」で検索して得られた結果から「さようなら」を含むものを除外する。
表1:+演算子と-演算子の検索動作
|