[Ludia-users 240] スコアの取得方法について

アーカイブの一覧に戻る

Junya Ohori oohor****@jp*****
2009年 7月 24日 (金) 19:46:19 JST


初めまして、富士通九州システムズの大堀と申します。

この度、あるシステムに Ludia の適用を検討しておりますが、
実現したいことに対し、疑問点がありますのでご回答、
アドバイスを頂きたく、メールさせていただきます。
お手数おかけしますが、宜しくお願い致します。

[実現したいこと]

複数のフィールド(例えば 3つ )をもつ文書に対して全文検索を実行し、
その結果をフィールドの重みを考慮してランキング表示したいのです。
そのために、ludiaを適用して、以下のような方式を考えました。

・テーブル table1 の複数のカラム (f1,f2,f3) にデータを格納
  し、それぞれに全文検索インデックス (i1,i2,i3) を 張っておく

・画面上より入力された複数のキーワードについて AND 検索を行う。
 つまり、各キーワードが f1, f2, f3 カラムのどれかに含まれているか
 を判定し、全てのキーワードが判定条件を満たす場合
 そのレコードがヒットしたものとみなす

・検索結果は、f1のスコアの降順 → f2のスコアの降順 → f3のスコアの降順
  の順に表示する。
 ※ つまり、f1 のカラムにマッチしたレコードを、f2 や f3 に
     しかマッチしなかったものより上位にランクしたい。

[疑問点]

上のことを実現するために、次のようなSQLを書きました.
 ※ 検索キーワードを、"keyword1", "keyword2" としています。
  
SELECT 
    f1,f2,f3,
       pgs2getscore(table1.ctid,'i1') as a,
       pgs2getscore(table1.ctid,'i2') as b,
       pgs2getscore(table1.ctid,'i3') as c
FROM 
       table1
WHERE 
      (
      f1 %% 'keyword1' or 
      f2 %% 'keyword1' or
       f3 %% 'keyword1' 
      )
      AND
      (
      f1 %% 'keyword2' or 
      f2 %% 'keyword2' or
       f3 %% 'keyword2' 
      )
ORDER BY a desc, b desc, c desc

この SQL を実行させると、スコア a, b, c は、WHERE の前半の 
keyword1 に対するもののみが、考慮されているようです。
keyword1 と keyword2 の両方を考慮したスコアでソートしたいのですが可能でしょうか。
できないとした場合、keyword2 に対するスコアを取得する方法がありますでしょうか。

[環境]
環境は以下の通りです。
OS      : Linux RedHat 
Postgres: 8.3
ludia   :1.5.2
senna   :1.1.4

どうぞ、宜しくお願い致します。




Ludia-users メーリングリストの案内
アーカイブの一覧に戻る