全文検索で二つ以上の項目を検索する時の挙動

全文検索を行う場合のテーブル設計メモ。



[記事]テーブルに以下のような項目が入っていた場合。

タイトル | 東京の予報
本文   | 今日の天気は....

  1. SELECT
  2.  *
  3. FROM
  4.  記事
  5. WHERE
  6.  ( to_tsvector('japanese', タイトル ) @@ to_tsquery('東京 & 天気') )
  7.  OR ( to_tsvector('japanese', 本文 ) @@ to_tsquery('東京 & 天気') )

のように検索すると記事がHITしない。
( なぜHITしないかの説明は割愛 )




( to_tsvector('japanese', タイトル ) || ( to_tsvector('japanese', 本文 ) ) @@ to_tsquery('東京 & 天気')


のように to_tsvector 関数の連結が思いつくが、この処理は重たすぎてまったく役に立たない。
(この式自体にインデックス張ったらどうなるか...... 後で試す。)



思いついた限り、解決策としては、



1. 本文の中に単語を詰め込む。

タイトル | 東京の予報
本文   | 今日の東京の天気予報です。


to_tsvector('japanese', 本文 ) ) @@ to_tsquery('東京 & 天気')




2. 全文検索用の項目が自動で作成されるような仕組みを考える。

タイトル | 東京の予報
本文   | 今日の天気は....
検索項目 | 東京の予報 今日の天気は....


to_tsvector('japanese', 検索項目 ) ) @@ to_tsquery('東京 & 天気')

(検索項目だけテーブル別の方が良いかもしれない)



全文検索の対象項目は一つだけにするべし。


追記:
「詳細編集」なる機能を発見したので、過去の記事とか見やすくしてみます。