Bug #288

XML形式でのHITSの数が、sortを行った場合に1offsetとなる。

Added by Tasuku SUENAGA 4 months ago. Updated 3 months ago.

Status:完了 Start:05/13/2010
Priority:Urgent Due date:
Assigned to:Tasuku SUENAGA % Done:

0%

Category:- Spent time: -
Target version:-

Description

XMLでのHITSの数が、offsetを指定してsortを行った場合に必ず1から始まってしまう。
方式検討中。

History

Updated by Tasuku SUENAGA 4 months ago

  • Assigned to changed from daijiro MORI to Tasuku SUENAGA

13ec7d35f8265fbc612c595ed5823392afc43d7b
にて対応。

この問題は、以下のような原因で起こった。
  • grn_select()は、結果の出力についてgrn_text_otoj()/grn_text_otoxml()の出力に依存している。
  • grn_select()は、ソートキーが指定されているか・いないかによって2つのパスを通る。
  • ソートされている場合には、grn_table_sort()を用いてソートが行われるが、このときにoffset/limitパラメータによって結果集合が部分集合となってしまう。その部分集合がgrn_text_otoxml()に渡される。このとき、offsetは0扱いとなる。なぜなら、offset処理はすでになされているからである。
  • ソートされていない場合には、offset/limit処理が行われず、grn_text_otoxml()にてoffset/limitの処理を行う。
  • 旧実装では、grn_text_otoxml()にて、HITSタグのOFFSET属性や、HITタグのNO属性の初期値は、offset + 1であった。ソートが行われた場合には、常にoffsetが0として呼び出される。よって、OFFSET属性やNO属性の初期値は必ず1かとなってしまう。
今回は、以下の方法で対処を行った。
  • grn_text_otoj()/grn_text_otoxml()に渡すformatに、あらたにhits_offsetというメンバを追加した。このメンバは、<HIT NO="">の値のオフセット-1の値が渡される。
  • hits_offsetメンバも初期化できるように、GRN_OBJ_FORMAT_INITマクロに引数を1つ増やした。
  • GRN_OBJ_FORMAT_INITマクロを使用しているところすべてに対して、適切なhits_offsetの値を指定するようにした。
  • HITSタグのOFFSET属性/HITタグのNO属性の値は、hits_offsetの値を用いて表示するようにした。

問題は修正されたが、それほどきれいな修正方法ではない。
#306 にも書いたが、grn_text_otoj()/grn_text_otoxml()がformat引数をとってtableの細かい表現方法まで指定するのは、単に文字列・数値のgrn_objをJSON化・XMLテキスト化する用途では面倒である。

grn_table_otoj()のような「内部」APIを作って、そちらではformat引数をとる、というのはどうだろうか。

Updated by Tasuku SUENAGA 3 months ago

  • Status changed from 新規 to 完了チェック待ち

Updated by Tasuku SUENAGA 3 months ago

sortbyが指定されていない場合に問題が生じるようになっていた。
ed46924fe5b6a7bb616fa9aa56bb655d5f56d426
にて修正。

Updated by daijiro MORI 3 months ago

  • Status changed from 完了チェック待ち to 完了

Also available in: Atom PDF