PostgreSQL + MeCab の全文検索でデータベースのフィールドを検索しようとしています。そこで、あることに気がつきました。

  • 大阪市生野区大阪 で検索するとヒットします。
  • 大阪市生野区大阪市 で検索するとヒットしません。

実験した SQL とその結果です。

dd=> select to_tsquery('大阪') @@ to_tsvector('japanese'::regconfig, '大阪市生野区');
 ?column?
----------
 t
(1 行)


dd=> select to_tsquery('大阪市') @@ to_tsvector('japanese'::regconfig, '大阪市生野区');
 ?column?
----------
 f
(1 行)


dd=> select ja_wakachi('大阪市生野区');
   ja_wakachi
-----------------
 大阪 市 生野 区
(1 行)

MeCab が 大阪市生野区 を 大阪 + + 生野 + と単語を分解するので 大阪市 ではヒットしないのだと思いますが…

この点を考慮するための技術的な方策は存在しますでしょうか。