OSDN Git Service

Add the regression test of full-text search using pg_bigm.
authorMasaoFujii <masao.fujii@gmail.com>
Tue, 24 Sep 2013 13:23:20 +0000 (22:23 +0900)
committerMasaoFujii <masao.fujii@gmail.com>
Tue, 24 Sep 2013 13:23:20 +0000 (22:23 +0900)
Beena Emerson, modified by me.

expected/pg_bigm.out
sql/pg_bigm.sql

index f9fc236..4db94f1 100644 (file)
@@ -113,3 +113,312 @@ SELECT show_bigm ('pg_bigmは検索性能を200%向上させました');
  {させ,した,せま,"た ",は検,まし,を2,上さ,向上,性能,検索,索性,能を," p",%向,0%,00,20,_b,bi,g_,gm,ig,mは,pg}
 (1 row)
 
+-- tests for full-text search
+CREATE TABLE test_bigm (doc text, tag text);
+INSERT INTO test_bigm VALUES ('pg_trgm - Tool that provides 3-gram full text search capability in PostgreSQL', 'pg_trgm');
+INSERT INTO test_bigm VALUES ('pg_bigm - Tool that provides 2-gram full text search capability in PostgreSQL', 'pg_bigm');
+INSERT INTO test_bigm VALUES ('pg_bigm has improved the full text search performance by 200%','pg_bigm performance');
+INSERT INTO test_bigm VALUES ('You can create an index for full text search by using GIN index.', 'full text search');
+INSERT INTO test_bigm VALUES ('\dx displays list of installed extensions', 'meta command');
+INSERT INTO test_bigm VALUES ('\w FILE outputs the current query buffer to the file specified', 'meta command');
+INSERT INTO test_bigm VALUES ('pg_trgm - PostgreSQLで3-gramの全文検索を使えるようにするツール', 'pg_trgm');
+INSERT INTO test_bigm VALUES ('pg_bigm - PostgreSQLで2-gramの全文検索を使えるようにするツール', 'pg_bigm');
+INSERT INTO test_bigm VALUES ('pg_bigmは検索性能を200%向上させました。', 'pg_bigm 検索性能');
+INSERT INTO test_bigm VALUES ('GINインデックスを利用して全文検索用のインデックスを作成します。', '全文検索');
+CREATE INDEX test_bigm_idx ON test_bigm USING gin (doc gin_bigm_ops);
+SET enable_seqscan = off;
+EXPLAIN (COSTS off) SELECT doc FROM test_bigm WHERE doc LIKE likequery ('a');
+                QUERY PLAN                
+------------------------------------------
+ Bitmap Heap Scan on test_bigm
+   Recheck Cond: (doc ~~ '%a%'::text)
+   ->  Bitmap Index Scan on test_bigm_idx
+         Index Cond: (doc ~~ '%a%'::text)
+(4 rows)
+
+EXPLAIN (COSTS off) SELECT doc FROM test_bigm WHERE doc LIKE likequery ('am');
+                QUERY PLAN                 
+-------------------------------------------
+ Bitmap Heap Scan on test_bigm
+   Recheck Cond: (doc ~~ '%am%'::text)
+   ->  Bitmap Index Scan on test_bigm_idx
+         Index Cond: (doc ~~ '%am%'::text)
+(4 rows)
+
+EXPLAIN (COSTS off) SELECT doc FROM test_bigm WHERE doc LIKE likequery ('GIN');
+                 QUERY PLAN                 
+--------------------------------------------
+ Bitmap Heap Scan on test_bigm
+   Recheck Cond: (doc ~~ '%GIN%'::text)
+   ->  Bitmap Index Scan on test_bigm_idx
+         Index Cond: (doc ~~ '%GIN%'::text)
+(4 rows)
+
+EXPLAIN (COSTS off) SELECT doc FROM test_bigm WHERE doc LIKE likequery ('bigm');
+                 QUERY PLAN                  
+---------------------------------------------
+ Bitmap Heap Scan on test_bigm
+   Recheck Cond: (doc ~~ '%bigm%'::text)
+   ->  Bitmap Index Scan on test_bigm_idx
+         Index Cond: (doc ~~ '%bigm%'::text)
+(4 rows)
+
+SELECT doc FROM test_bigm WHERE doc LIKE likequery (NULL);
+ doc 
+-----
+(0 rows)
+
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('');
+ doc 
+-----
+(0 rows)
+
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('%');
+                              doc                              
+---------------------------------------------------------------
+ pg_bigm has improved the full text search performance by 200%
+ pg_bigmは検索性能を200%向上させました。
+(2 rows)
+
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('\');
+                              doc                               
+----------------------------------------------------------------
+ \dx displays list of installed extensions
+ \w FILE outputs the current query buffer to the file specified
+(2 rows)
+
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('_');
+                                      doc                                      
+-------------------------------------------------------------------------------
+ pg_trgm - Tool that provides 3-gram full text search capability in PostgreSQL
+ pg_bigm - Tool that provides 2-gram full text search capability in PostgreSQL
+ pg_bigm has improved the full text search performance by 200%
+ pg_trgm - PostgreSQLで3-gramの全文検索を使えるようにするツール
+ pg_bigm - PostgreSQLで2-gramの全文検索を使えるようにするツール
+ pg_bigmは検索性能を200%向上させました。
+(6 rows)
+
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('\dx');
+                    doc                    
+-------------------------------------------
+ \dx displays list of installed extensions
+(1 row)
+
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('pg_bigm');
+                                      doc                                      
+-------------------------------------------------------------------------------
+ pg_bigm - Tool that provides 2-gram full text search capability in PostgreSQL
+ pg_bigm has improved the full text search performance by 200%
+ pg_bigm - PostgreSQLで2-gramの全文検索を使えるようにするツール
+ pg_bigmは検索性能を200%向上させました。
+(4 rows)
+
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('200%');
+                              doc                              
+---------------------------------------------------------------
+ pg_bigm has improved the full text search performance by 200%
+ pg_bigmは検索性能を200%向上させました。
+(2 rows)
+
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('w');
+                              doc                               
+----------------------------------------------------------------
+ \w FILE outputs the current query buffer to the file specified
+(1 row)
+
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('by');
+                               doc                                
+------------------------------------------------------------------
+ pg_bigm has improved the full text search performance by 200%
+ You can create an index for full text search by using GIN index.
+(2 rows)
+
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('GIN');
+                               doc                                
+------------------------------------------------------------------
+ You can create an index for full text search by using GIN index.
+ GINインデックスを利用して全文検索用のインデックスを作成します。
+(2 rows)
+
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('tool');
+ doc 
+-----
+(0 rows)
+
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('Tool');
+                                      doc                                      
+-------------------------------------------------------------------------------
+ pg_trgm - Tool that provides 3-gram full text search capability in PostgreSQL
+ pg_bigm - Tool that provides 2-gram full text search capability in PostgreSQL
+(2 rows)
+
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('performance');
+                              doc                              
+---------------------------------------------------------------
+ pg_bigm has improved the full text search performance by 200%
+(1 row)
+
+EXPLAIN (COSTS off) SELECT doc FROM test_bigm WHERE doc LIKE likequery ('使');
+                QUERY PLAN                 
+-------------------------------------------
+ Bitmap Heap Scan on test_bigm
+   Recheck Cond: (doc ~~ '%使%'::text)
+   ->  Bitmap Index Scan on test_bigm_idx
+         Index Cond: (doc ~~ '%使%'::text)
+(4 rows)
+
+EXPLAIN (COSTS off) SELECT doc FROM test_bigm WHERE doc LIKE likequery ('検索');
+                 QUERY PLAN                  
+---------------------------------------------
+ Bitmap Heap Scan on test_bigm
+   Recheck Cond: (doc ~~ '%検索%'::text)
+   ->  Bitmap Index Scan on test_bigm_idx
+         Index Cond: (doc ~~ '%検索%'::text)
+(4 rows)
+
+EXPLAIN (COSTS off) SELECT doc FROM test_bigm WHERE doc LIKE likequery ('ツール');
+                  QUERY PLAN                   
+-----------------------------------------------
+ Bitmap Heap Scan on test_bigm
+   Recheck Cond: (doc ~~ '%ツール%'::text)
+   ->  Bitmap Index Scan on test_bigm_idx
+         Index Cond: (doc ~~ '%ツール%'::text)
+(4 rows)
+
+EXPLAIN (COSTS off) SELECT doc FROM test_bigm WHERE doc LIKE likequery ('全文検索');
+                   QUERY PLAN                    
+-------------------------------------------------
+ Bitmap Heap Scan on test_bigm
+   Recheck Cond: (doc ~~ '%全文検索%'::text)
+   ->  Bitmap Index Scan on test_bigm_idx
+         Index Cond: (doc ~~ '%全文検索%'::text)
+(4 rows)
+
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('使');
+                              doc                               
+----------------------------------------------------------------
+ pg_trgm - PostgreSQLで3-gramの全文検索を使えるようにするツール
+ pg_bigm - PostgreSQLで2-gramの全文検索を使えるようにするツール
+(2 rows)
+
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('検索');
+                               doc                               
+-----------------------------------------------------------------
+ pg_trgm - PostgreSQLで3-gramの全文検索を使えるようにするツール
+ pg_bigm - PostgreSQLで2-gramの全文検索を使えるようにするツール
+ pg_bigmは検索性能を200%向上させました。
+ GINインデックスを利用して全文検索用のインデックスを作成します。
+(4 rows)
+
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('ツール');
+                              doc                               
+----------------------------------------------------------------
+ pg_trgm - PostgreSQLで3-gramの全文検索を使えるようにするツール
+ pg_bigm - PostgreSQLで2-gramの全文検索を使えるようにするツール
+(2 rows)
+
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('インデックスを作成');
+                               doc                               
+-----------------------------------------------------------------
+ GINインデックスを利用して全文検索用のインデックスを作成します。
+(1 row)
+
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('3-gramの全文検索');
+                              doc                               
+----------------------------------------------------------------
+ pg_trgm - PostgreSQLで3-gramの全文検索を使えるようにするツール
+(1 row)
+
+-- check that the search results don't change if enable_recheck is disabled
+-- in order to check that index full search is NOT executed
+SET pg_bigm.enable_recheck = off;
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('w');
+                              doc                               
+----------------------------------------------------------------
+ \w FILE outputs the current query buffer to the file specified
+(1 row)
+
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('by');
+                               doc                                
+------------------------------------------------------------------
+ pg_bigm has improved the full text search performance by 200%
+ You can create an index for full text search by using GIN index.
+(2 rows)
+
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('使');
+                              doc                               
+----------------------------------------------------------------
+ pg_trgm - PostgreSQLで3-gramの全文検索を使えるようにするツール
+ pg_bigm - PostgreSQLで2-gramの全文検索を使えるようにするツール
+(2 rows)
+
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('検索');
+                               doc                               
+-----------------------------------------------------------------
+ pg_trgm - PostgreSQLで3-gramの全文検索を使えるようにするツール
+ pg_bigm - PostgreSQLで2-gramの全文検索を使えるようにするツール
+ pg_bigmは検索性能を200%向上させました。
+ GINインデックスを利用して全文検索用のインデックスを作成します。
+(4 rows)
+
+SET pg_bigm.enable_recheck = on;
+EXPLAIN (COSTS off) SELECT doc FROM test_bigm WHERE doc LIKE '%bigm%';
+                 QUERY PLAN                  
+---------------------------------------------
+ Bitmap Heap Scan on test_bigm
+   Recheck Cond: (doc ~~ '%bigm%'::text)
+   ->  Bitmap Index Scan on test_bigm_idx
+         Index Cond: (doc ~~ '%bigm%'::text)
+(4 rows)
+
+SELECT doc FROM test_bigm WHERE doc LIKE '%Tool%';
+                                      doc                                      
+-------------------------------------------------------------------------------
+ pg_trgm - Tool that provides 3-gram full text search capability in PostgreSQL
+ pg_bigm - Tool that provides 2-gram full text search capability in PostgreSQL
+(2 rows)
+
+SELECT doc FROM test_bigm WHERE doc LIKE '%検索%';
+                               doc                               
+-----------------------------------------------------------------
+ pg_trgm - PostgreSQLで3-gramの全文検索を使えるようにするツール
+ pg_bigm - PostgreSQLで2-gramの全文検索を使えるようにするツール
+ pg_bigmは検索性能を200%向上させました。
+ GINインデックスを利用して全文検索用のインデックスを作成します。
+(4 rows)
+
+EXPLAIN (COSTS off) SELECT doc FROM test_bigm WHERE doc LIKE '%\%';
+                QUERY PLAN                
+------------------------------------------
+ Bitmap Heap Scan on test_bigm
+   Recheck Cond: (doc ~~ '%\%'::text)
+   ->  Bitmap Index Scan on test_bigm_idx
+         Index Cond: (doc ~~ '%\%'::text)
+(4 rows)
+
+SELECT doc FROM test_bigm WHERE doc LIKE '%\%';
+                              doc                              
+---------------------------------------------------------------
+ pg_bigm has improved the full text search performance by 200%
+(1 row)
+
+EXPLAIN (COSTS off) SELECT doc FROM test_bigm WHERE doc LIKE 'pg\___gm%';
+                   QUERY PLAN                   
+------------------------------------------------
+ Bitmap Heap Scan on test_bigm
+   Recheck Cond: (doc ~~ 'pg\___gm%'::text)
+   ->  Bitmap Index Scan on test_bigm_idx
+         Index Cond: (doc ~~ 'pg\___gm%'::text)
+(4 rows)
+
+SELECT doc FROM test_bigm WHERE doc LIKE 'pg\___gm%';
+                                      doc                                      
+-------------------------------------------------------------------------------
+ pg_trgm - Tool that provides 3-gram full text search capability in PostgreSQL
+ pg_bigm - Tool that provides 2-gram full text search capability in PostgreSQL
+ pg_bigm has improved the full text search performance by 200%
+ pg_trgm - PostgreSQLで3-gramの全文検索を使えるようにするツール
+ pg_bigm - PostgreSQLで2-gramの全文検索を使えるようにするツール
+ pg_bigmは検索性能を200%向上させました。
+(6 rows)
+
index 6abf534..9facf44 100644 (file)
@@ -27,3 +27,72 @@ SELECT show_bigm ('木');
 SELECT show_bigm ('検索');
 SELECT show_bigm ('インデックスを作成');
 SELECT show_bigm ('pg_bigmは検索性能を200%向上させました');
+
+-- tests for full-text search
+CREATE TABLE test_bigm (doc text, tag text);
+
+INSERT INTO test_bigm VALUES ('pg_trgm - Tool that provides 3-gram full text search capability in PostgreSQL', 'pg_trgm');
+INSERT INTO test_bigm VALUES ('pg_bigm - Tool that provides 2-gram full text search capability in PostgreSQL', 'pg_bigm');
+INSERT INTO test_bigm VALUES ('pg_bigm has improved the full text search performance by 200%','pg_bigm performance');
+INSERT INTO test_bigm VALUES ('You can create an index for full text search by using GIN index.', 'full text search');
+INSERT INTO test_bigm VALUES ('\dx displays list of installed extensions', 'meta command');
+INSERT INTO test_bigm VALUES ('\w FILE outputs the current query buffer to the file specified', 'meta command');
+INSERT INTO test_bigm VALUES ('pg_trgm - PostgreSQLで3-gramの全文検索を使えるようにするツール', 'pg_trgm');
+INSERT INTO test_bigm VALUES ('pg_bigm - PostgreSQLで2-gramの全文検索を使えるようにするツール', 'pg_bigm');
+INSERT INTO test_bigm VALUES ('pg_bigmは検索性能を200%向上させました。', 'pg_bigm 検索性能');
+INSERT INTO test_bigm VALUES ('GINインデックスを利用して全文検索用のインデックスを作成します。', '全文検索');
+
+CREATE INDEX test_bigm_idx ON test_bigm USING gin (doc gin_bigm_ops);
+SET enable_seqscan = off;
+
+EXPLAIN (COSTS off) SELECT doc FROM test_bigm WHERE doc LIKE likequery ('a');
+EXPLAIN (COSTS off) SELECT doc FROM test_bigm WHERE doc LIKE likequery ('am');
+EXPLAIN (COSTS off) SELECT doc FROM test_bigm WHERE doc LIKE likequery ('GIN');
+EXPLAIN (COSTS off) SELECT doc FROM test_bigm WHERE doc LIKE likequery ('bigm');
+
+SELECT doc FROM test_bigm WHERE doc LIKE likequery (NULL);
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('');
+
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('%');
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('\');
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('_');
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('\dx');
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('pg_bigm');
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('200%');
+
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('w');
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('by');
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('GIN');
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('tool');
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('Tool');
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('performance');
+
+EXPLAIN (COSTS off) SELECT doc FROM test_bigm WHERE doc LIKE likequery ('使');
+EXPLAIN (COSTS off) SELECT doc FROM test_bigm WHERE doc LIKE likequery ('検索');
+EXPLAIN (COSTS off) SELECT doc FROM test_bigm WHERE doc LIKE likequery ('ツール');
+EXPLAIN (COSTS off) SELECT doc FROM test_bigm WHERE doc LIKE likequery ('全文検索');
+
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('使');
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('検索');
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('ツール');
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('インデックスを作成');
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('3-gramの全文検索');
+
+-- check that the search results don't change if enable_recheck is disabled
+-- in order to check that index full search is NOT executed
+SET pg_bigm.enable_recheck = off;
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('w');
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('by');
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('使');
+SELECT doc FROM test_bigm WHERE doc LIKE likequery ('検索');
+SET pg_bigm.enable_recheck = on;
+
+EXPLAIN (COSTS off) SELECT doc FROM test_bigm WHERE doc LIKE '%bigm%';
+SELECT doc FROM test_bigm WHERE doc LIKE '%Tool%';
+SELECT doc FROM test_bigm WHERE doc LIKE '%検索%';
+
+EXPLAIN (COSTS off) SELECT doc FROM test_bigm WHERE doc LIKE '%\%';
+SELECT doc FROM test_bigm WHERE doc LIKE '%\%';
+
+EXPLAIN (COSTS off) SELECT doc FROM test_bigm WHERE doc LIKE 'pg\___gm%';
+SELECT doc FROM test_bigm WHERE doc LIKE 'pg\___gm%';