みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Postgresql Mecabでの解析について

Postgresのtextsearch_jaを設定しました。
そこでMecabを使用しています。


例として以下のテーブルで
create table table1 ( id int, col1 text, col2 text, tsv tsvector );
更新処理時にtsvカラムに解析データが入るようにトリガを設定しました。

col1に「田中00001」をINSERTします。
解析するtsvカラムには「田中」と「00001」が入ります。

ここで、「0000」と検索しても、レコードを取得できませんでした。
投げたSQLは以下のような感じです。
select * from table1 where tsv @@ to_tsquery('japanese', '0000')

select * from table1 where tsv @@ to_tsquery('japanese', '0000')
とした場合はレコードを取得することができます。

以下も試しましたがレコードは取得できませんでした。
select * from table1 where tsv @@ plainto_tsquery('japanese', '0000')

「0000」にて検索した場合に、全文検索の機能でレコードを取得する方法はありますでしょうか?

postgres8.4.5
Mecab 0.98

投稿日時 - 2010-12-02 00:36:47

QNo.6357118

すぐに回答ほしいです

質問者が選んだベストアンサー

MeCab が 00001 を 1 つの単語として切り出してインデックスを作っているので、基本的には 0000 で検索してもヒットしません。

MeCab を使うような分かち書き方式の全文検索では、単語を切り出すときに使う辞書によるので、お望みのようなことを行うには N-gram 方式の全文検索が適しています。PostgreSQL では Senna や Groonga といった N-Gram 方式の全文検索エンジンと組み合わせた textsearch_senna や textsearch_grronga を使うのがいいでしょう。

ただ、PostgreSQL 8.4 以上をお使いのようですので、前方一致であれば MeCab でも 0000 をインデックスを使って検索できます。

SELECT * FROM table1 WHERE tsv @@ to_tsquey('japanese', '0000*');

投稿日時 - 2010-12-03 00:36:37

お礼

まだ検証中ですがtextsearch_sennaを採用しようと思っています。
ありがとうございました。

投稿日時 - 2010-12-03 01:07:09

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問