Kouhei Sutou
kou****@clear*****
2016年 1月 20日 (水) 22:06:06 JST
須藤です。 In <20160****@orega*****> "[groonga-dev,03865] PGROONGAでの等価条件&不等価条件の指定方法" on Wed, 20 Jan 2016 10:23:55 +0900, 高見 直輝 <takam****@orega*****> wrote: > @@演算子を使用してGROONGAの等価条件と不等価条件をそれぞれ行 > おうとしているのですが、意図した結果になりません。 > http://groonga.org/ja/docs/reference/grn_expr/query_syntax.html#equal-condition http://pgroonga.github.io/ja/reference/operators/query.html に > カラム名:@キーワードのようにカラム名:から始まる構文を使う > ことはできません。これはPGroongaで無効にしています。 と書いているのですが、@@演算子では等価条件・不等価条件を使う ことはできません。等価条件は=演算子を使ってください。 不等価条件は。。。<>演算子を使うと、PostgreSQLが内部で=演算 子を使って実現してくれるかもしれません。ちょっと試していない のですぐにはわからないです。 > テーブル定義などは[groonga-dev,03855]と同じです。 等価条件(つまり完全一致検索)は全文検索とは違うインデックス を作成する必要があります。具体的にはvarchar型にしてインデッ クスを作成してください。 http://pgroonga.github.io/ja/tutorial/#equal-string > CREATE TABLE tags ( > id integer, > tag varchar(1023) > ); > > CREATE INDEX pgroonga_tag_index ON tags USING pgroonga (tag); > テーブルには以下のレコードが存在しています。 > "\st","新しいフォルダー" > "\st","新しいフォルダー\desktop.ini" > "\st","00201-00300" > まずは等価条件から。 > 先述のレコードの中から、『"\st","新しいフォルダー"』のみを取得するため、 > 以下のSQLを実行しました。 > select lower(pathcombine(rootdir::text, path)) as tmp from TEST_TABLE > where lower(pathcombine(rootdir,path)) @@ '"\\st\\新しいフォルダー"'; > この結果、以下のレコードが取得されました。 > \st\新しいフォルダー\desktop.ini > \st\新しいフォルダー これは「\st\新しいフォルダー」で全文検索をしていることになる ので「\st\新しいフォルダー」を含む↑のレコードがヒットしてい ます。 > 次に、不等価条件を。 > 『"\st","00201-00300"』のみを取得するため、以下のSQLを実行しました。 > select lower(pathcombine(rootdir::text, path)) as tmp from TEST_TABLE > where lower(pathcombine(rootdir,path)) @@ '!"\\st\\新しいフォルダー"'; > この結果は0件でした。 これは「!\st\新しいフォルダー」で全文検索をしていることにな るので「!\st\新しいフォルダー」を含むレコードがなく、0件ヒッ トとなっています。 > なお、各SQLを実行したときにPGROONGAのデバッグログに何も出力されませんで > した。 > これは、そもそもPGROONGAのインデックスが使われていないということなのでしょ > うか? それは妙ですね。検索条件にlower()をつけて select lower(pathcombine(rootdir::text, path)) as tmp from TEST_TABLE where lower(pathcombine(rootdir,path)) @@ lower('"\\st\\新しいフォルダー"'); としてもデバッグログになにも出力されないんですよね? 同じスキーマで同じ検索条件で、文字列だけ変えているのにでない のはおかしい気がします。 -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> Groongaベースの全文検索システムを総合サポート: http://groonga.org/ja/support/ パッチ採用 - プログラミングが楽しい人向けの採用プロセス: http://www.clear-code.com/recruitment/ リーダブルコードワークショップ: http://www.clear-code.com/services/code-reader/readable-code-workshop.html