[Senna-dev 801] Re: sen_query_exec()関数でsen_rec_section単位に設定したrecordsに検索結果を追加したい

アーカイブの一覧に戻る

Akihiro YAMANOI a.yam****@gmail*****
2008年 3月 6日 (木) 13:41:17 JST


山野井です。
森さん、ご返信どうもありがとうございます。

要望の件を反映して頂けるとのことで嬉しいです。
Sennaは検索単位の変更ができたりサブレコードの
概念があって面白いですね!

次回のリリースを楽しみに待たせて頂きます。
お忙しい中、ありがとうございました。

morit****@razil*****<morit****@razil*****> さんは書きました:
>
> 森です。
>
> ご指摘いただきありがとうございます!!
>
> 確かに、sen_rec_document単位以外の場合について考慮が抜けていました。
> これも次回のリリース時にぜひ反映させていただきたいと思います。
>
> # sen_rec_sectionやsen_rec_positionを使ってくださって大変うれしいです!!
> # ややこしい機能なのですが、作った甲斐がありました。
>
> >>> Akihiro YAMANOI さんは書きました:
> > 山野井です。
> > sen_query_exec()関数への要望です。段落単位や出現位置単位に設定したレコードに対し、
> > 検索結果を追加・削除する際の動作に関してです。
> >
> > 以下の手順で検索クエリを発行し、段落単位での検索結果を得たいと考えています。
> > (1). sen_records_open()の引数record_unitに「sen_rec_section」を指定し、検索結果を段落単位に設定する。
> > (2). sen_query_exec()でクエリを発行し、結果をrに得る。
> > (3). sen_query_exec()で別のクエリを発行し、結果をrに追加する。
> >
> > 以下のようなプログラムになります。
> > ---
> > sen_index *i = sen_index_open("/path/to/index");
> > sen_records *r = sen_records_open(sen_rec_section, sen_rec_none, 0);  /* (1) */
> > {
> >     sen_query *q = sen_query_open("query string", 12, sen_sel_and, 32,
> > sen_enc_utf8);
> >     sen_query_exec(i, q, r, sen_sel_or); /* (2) */
> > }
> > {
> >     sen_query *q = sen_query_open("another query", 13, sen_sel_and,
> > 32, sen_enc_utf8);
> >     sen_query_exec(i, q, r, sen_sel_or); /* (3) */
> > }
> > ---
> > Senna-1.1.1で上記を実行してみた結果、(2)の結果は期待通りに得られるのですが、
> > (3)の検索結果がrに反映されませんでした。
> >
> > query.cファイルを覗いてみたところ、485行目辺りに以下のような記述があります。
> > s = n ? sen_records_open(sen_rec_document, sen_rec_none, 0) : r;
> >
> > どうやらrとsの単位が不一致のため動作しないのではと思い、以下のように無理矢理
> > 単位を一致させるよう書き換えてsennaを再コンパイルしたところ、上記プログラムが
> > 期待通りの動作をするようになりました。
> > s = n ? sen_records_open(r->record_unit, r->subrec_unit, 0) : r;
> >
> > →1件以上の検索結果が入ったレコードに対して、
> > sen_query_exec()が結果を追加・削除できるのは
> > sen_rec_document単位の場合のみという仕様(?)
> >
> >
> > 現在のところ(senna本体は書き換えず)、この仕様を避けるために呼び出し側で
> > 空のレコードをsen_query_exec()に渡して結果を得た後、sen_records_union()等を
> > 呼ぶようなコードを書いています。
> > (良く見るとsen_query_exec()関数内に同じ事をしているswitch文がありました)
> >
> > 段落単位や出現位置単位に設定したレコードに対してもsen_query_exec()だけで
> > 検索結果を反映できるようになれば、重複したコードを書かなくて良くなり便利
> > だと思います。もしもSennaの仕様上可能でしたら、ぜひご一考下さい!
> >
> > どうぞよろしくお願いいたします。
> >
> > _______________________________________________
> > Senna-dev mailing list
> > Senna****@lists*****
> > http://lists.sourceforge.jp/mailman/listinfo/senna-dev
> > バグ報告方法:http://qwik.jp/senna/bug_report.html
> >
> --
> morita




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