[groonga-dev,04722] Re: PGroonga における検索スコア

Back to archive index
toshio_uchiy****@mirro***** toshio_uchiy****@mirro*****
2019年 1月 9日 (水) 16:20:30 JST


須藤様

 お世話になります。ご教示ありがとうございます。内山です。
結果の explain です。

moovle=# explain ( analyze, buffers ) with v as 
( SELECT id, content FROM subtitled WHERE content &@~ 'algorithm' 
ORDER BY pgroonga_score( tableoid, ctid) DESC OFFSET 0 LIMIT 100 ) 
SELECT id, array_to_json( v.content ) FROM v;

  QUERY PLAN

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------
 CTE Scan on v  
	(cost=39163.48..39165.73 rows=100 width=40) 
	(actual time=58.567..208.771 rows=100 loops=1)
   Buffers: shared hit=20239 read=504
   CTE v
     ->  Limit  
	(cost=39163.23..39163.48 rows=100 width=377) 
	(actual time=56.933..56.972 rows=100 loops=1)
           Buffers: shared hit=20013
           ->  Sort  (cost=39163.23..39253.93 rows=36282 width=377) 
			(actual time=56.932..56.964 rows=100 loops=1)
                 Sort Key: (pgroonga_score(subtitled.tableoid, subtitled.ctid))
DESC
                 Sort Method: top-N heapsort  Memory: 32kB
                 Buffers: shared hit=20013
                 ->  Index Scan using subtitled_pgroonga_content_idx on subtitled  
			(cost=0.00..37776.56 rows=36282 width=377) 
			(actual time=31.602..54.725 rows=10371 loops=1)
                       Index Cond: (content &@~ 'algorithm'::text)
                       Buffers: shared hit=20010
 Planning time: 33.601 ms
 Execution time: 209.069 ms
(14 行)

となりました。十分使用に耐えます。実際、先ほどから Moovle は、pgroonga_score で
検索順位をつけています。
 あと、pgroonga_score はチュートリアルにも書いてある一般的な関数で
あるのに、それを使って検索順位を付けられることに気づかず、申し訳ありません
でした。よく読んだら、検索順位の付け方も書いてありますね。
 これからもよろしくお願いします。

-----Original Message-----
From: groonga-dev <groon****@lists*****> On Behalf Of Kouhei Sutou
Sent: Tuesday, January 8, 2019 7:38 PM
To: groon****@lists*****
Subject: [groonga-dev,04721] Re: PGroonga における検索スコア

須藤です。

In <000201d4a562$16ba6780$442f3680$@mirror.ocn.ne.jp>
  "[groonga-dev,04720] PGroonga における検索スコア" on Sun, 6 Jan 2019 10:49:40 +0900,
  <toshio_uchiy****@mirro*****> wrote:

> ここで、ORDER BY 句では、PostgreSQL の関数を使って検索語
> algorithm の出現回数を計算しています。

出現回数pgroonga_score()で得られるので次のようにしてみてくだ
さい。

with v AS
( SELECT id,  content FROM subtitled WHERE content &@~ 'algorithm'
ORDER BY pgroonga_score(tableoid, ctid) DESC OFFSET 0 LIMIT 100 ) SELECT id, array_to_json( v.content ) FROM v;

>  PGroonga でも、全文検索する文章に依存したスコアリング方法は
> ないでしょうか。ただし、content 列は text 型の配列です。

pgroonga_score()がそれです。

  https://pgroonga.github.io/ja/reference/functions/pgroonga-score.html

スコアリング方法は次のように
pgroonga_full_text_search_condition_with_scorersを使うとカス
タマイズできます。これは3回以上出現してもそれ以上カウントし
ない例です。

  content &@~ ('algorithm', null, 'scorer_tf_at_most($index, 3)', null):pgroonga_full_text_search_condition_with_scorers

参考:

  * https://pgroonga.github.io/ja/reference/operators/query-v2.html
  * http://groonga.org/ja/docs/reference/scorer.html

--
須藤 功平 <kou****@clear*****>
株式会社クリアコード <https://www.clear-code.com/>

Groongaベースの全文検索システムを総合サポート:
  http://groonga.org/ja/support/
データ処理ツールの開発:
  https://www.clear-code.com/blog/2018/7/11.html

_______________________________________________
groonga-dev mailing list
groon****@lists*****
https://lists.osdn.me/mailman/listinfo/groonga-dev


groonga-dev メーリングリストの案内
Back to archive index