[pgsql-jp: 40698] Re: postgres8.4+senna1.5の検索について

Itagaki Takahiro itagaki.takahiro @ gmail.com
2011年 2月 22日 (火) 21:02:10 JST


2011/2/22 Masahiro Kato <kato @ ndkcom.co.jp>:
> postgres8.4+senna1.5の検索についてお尋ねします
>
> select count (*) from item
> where (title %% '夏' ) and (title %% '目');
>
> で'夏目'のデータを検索できないのですが
> どうすれば検索できるのでしょうか?

textsearch_senna のバグでした。
Senna クエリで "夏+目" と "夏 +目" で結果が違うのを見逃していました。
( + の前にスペースの有無)

以下の修正をしてください。HEAD のほうには反映しておきます。

Index: textsearch_senna.c
===================================================================
RCS file: /cvsroot/textsearch-ja/textsearch_senna/textsearch_senna.c,v
retrieving revision 1.16
diff -u -r1.16 textsearch_senna.c
--- textsearch_senna.c	2 Feb 2011 06:11:04 -0000	1.16
+++ textsearch_senna.c	22 Feb 2011 11:59:00 -0000
@@ -1451,7 +1451,7 @@
 			{
 				/* %foo% is converted to "foo" */
 				if (buf.len > 0)
-					appendStringInfoChar(&buf, '+');
+					appendStringInfoString(&buf, " +");
 				appendStringInfoChar(&buf, '"');
 				appendBinaryStringInfo(&buf, str + 1, len - 2);
 				appendStringInfoChar(&buf, '"');
@@ -1498,7 +1498,7 @@
 						if (!quoted)
 						{
 							if (buf.len > 0)
-								appendStringInfoChar(&buf, '+');
+								appendStringInfoString(&buf, " +");
 							appendStringInfoChar(&buf, '"');
 							quoted = true;
 						}
@@ -1517,7 +1517,7 @@
 		else
 		{
 			if (buf.len > 0)
-				appendStringInfoChar(&buf, '+');
+				appendStringInfoString(&buf, " +");
 			/* just copy for senna query */
 			appendBinaryStringInfo(&buf, str, len);
 		}



-- 
Itagaki Takahiro


pgsql-jp メーリングリストの案内