Namazu-users-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Search::Namazu::Search(date値の取得)



いわきりです

S Okiyama wrote in <00d401c320f2$b22d17e0$23dba8c0@genome7> :
>上記日付はfilterを加工して私がfield検索用に設定しているデータ内の日付。
>その他の内容(summry,title,author...)も同様にfilterにて設定。
>同様にSearch::Namazuもfield情報の値らしきを得られるとの認識で
>使用しております(rankはおまけ)(以下Searchの結果)。
> ( +date:/199[9-9]/  )
>Results:Reference: [  ( +date:/199[9-9]/  ) :11]
>Total 11 docments matching your query.
>
>1.Title:Hyd...............lls.
>Author:Hin...............ke H.
>Date:1052883980
>20,46,12,14,4,103,3,133,0 ->localtime変換結果->データ作成日付
>
>上記Dateに日付データ内日付が入ってほしいのです。
>何かよい方法はありませんか。

ざっと見た感じ、Search::Namazuのbugでは無さそうですが、
検索に、
  +date:/(適当な値)/
を使った時に、おかしくなりますね。
sortした際に、docid(libnamazuでの文書管理番号)と対応するdateが
アンマッチしているように思えます。

内部で持つunixtimeでなく、NMZ.result.dateの値を使うための
patchを添付します。

クラス変数
  $hlist->sdate   //  STRING DATE
を追加しました。こちらに、NMZ.result.dateの対応行が入ります。

patchを当てて、本来の$hlist->dateを調べると何故か正しい値に
なっているので、検証すべきは、libnamazuの中にありそうです。

以下、patch
diff -u Search-Namazu-0.92/Namazu.pm Search-Namazu-test/Namazu.pm
--- Search-Namazu-0.92/Namazu.pm	Wed Jun 19 19:01:10 2002
+++ Search-Namazu-test/Namazu.pm	Fri May 23 17:00:44 2003
@@ -289,7 +289,7 @@
 }
 
 sub set {
-    my ($self, $score, $uri, $date, $rank, $summary, $title, $author) = @_;
+    my ($self, $score, $uri, $date, $rank, $summary, $title, $author, $sdate) = @_;
     $self->{score} = $score;
     $self->{uri} = $uri;
     $self->{date} = $date;
@@ -297,6 +297,7 @@
     $self->{summary} = $summary;
     $self->{title} = $title;
     $self->{author} = $author;
+    $self->{sdate} = $sdate;
 }
 
 sub score {
@@ -362,6 +363,15 @@
     $self->{'author'};
 }
 
+sub sdate {
+    my $self = shift;
+    if (@_) {
+	my $sdate = shift;
+	$self->{'sdate'} = $sdate;
+    }
+    $self->{'sdate'};
+}
+
 1;
 __END__
 
diff -u Search-Namazu-0.92/Namazu.xs Search-Namazu-test/Namazu.xs
--- Search-Namazu-0.92/Namazu.xs	Wed Jun 19 19:01:10 2002
+++ Search-Namazu-test/Namazu.xs	Fri May 23 16:55:59 2003
@@ -68,7 +68,7 @@
 		int i;
 		AV *retar;
 		NmzResult hlist;
-		char result[4][BUFSIZE];
+		char result[5][BUFSIZE];
 
 		qstr = SvPV(query, PL_na);
 		strcpy(cqstr, qstr);
@@ -81,6 +81,7 @@
 			nmz_get_field_data(hlist.data[i].idxid, hlist.data[i].docid, "summary", result[1]);
 			nmz_get_field_data(hlist.data[i].idxid, hlist.data[i].docid, "title", result[2]);
 			nmz_get_field_data(hlist.data[i].idxid, hlist.data[i].docid, "author", result[3]);
+			nmz_get_field_data(hlist.data[i].idxid, hlist.data[i].docid, "date", result[4]);
 			ENTER;
 			SAVETMPS;
 			PUSHMARK(SP);
@@ -92,6 +93,7 @@
 			PUSHs(sv_2mortal(newSVpv(result[1], strlen(result[1]))));
 			PUSHs(sv_2mortal(newSVpv(result[2], strlen(result[2]))));
 			PUSHs(sv_2mortal(newSVpv(result[3], strlen(result[3]))));
+			PUSHs(sv_2mortal(newSVpv(result[4], strlen(result[4]))));
 			PUTBACK;
 			perl_call_method("set", G_DISCARD);
 			av_push(retar, ohlist);



-- 
Youichi Iwakiri