textsearch_jaのバグ?
textsearch_jaの挙動を調べていて、ちょっと妙な動きに気づいた。
日本語ではなくて英語を to_tsquery() に与えたときの挙動なんだけど、以下の例のように、与えた英文キーワードの末端が欠けるというものだ。
test=# EXPLAIN SELECT data FROM test WHERE to_tsvector('japanese', data) @@ to_tsquery('japanese', 'tennis'); QUERY PLAN ------------------------------------------------------------------------------ Seq Scan on test (cost=0.00..28.45 rows=6 width=32) Filter: (to_tsvector('japanese'::regconfig, data) @@ '''tenni'''::tsquery) (2 rows) test=# SELECT data FROM test WHERE to_tsvector('japanese', data) @@ to_tsquery('japanese', 'tennis'); data ---------------------------------------------------------------- Wimbledon is a game of the tennis that is famous in the world. (1 row) test=#
この現象は'tennis'だけでなく、'baseball'や'footboll'でも発生している・・・。
なお、通常のtextsearchの場合はこの現象は起きない。
test=# EXPLAIN SELECT data FROM test WHERE to_tsvector(data) @@ to_tsquery('tennis'); QUERY PLAN ------------------------------------------------------------- Seq Scan on test (cost=0.00..31.53 rows=6 width=32) Filter: (to_tsvector(data) @@ to_tsquery('tennis'::text)) (2 rows) test=#
textsearch_jaの裏で動いているMecabが変なことしているのかな?と思い、Mecab単体での動作を見てみるが
$ mecab tennis tennis 名詞,固有名詞,組織,*,*,*,* EOS
Mecab自体はとくに変なことはしているように思えない。
となると、やっぱりtextsearch_ja固有の問題が発生しているのかな・・・?