Update of /cvsroot/monetdb/pathfinder/modules/pftijah
In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv28649
Modified Files:
pftijah.mx
Log Message:
- create MIL ftcontains operator which for the time being always returns true
U pftijah.mx
Index: pftijah.mx
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/modules/pftijah/pftijah.mx,v
retrieving revision 1.221
retrieving revision 1.222
diff -u -d -r1.221 -r1.222
--- pftijah.mx 2 Apr 2009 17:27:41 -0000 1.221
+++ pftijah.mx 6 Apr 2009 13:45:20 -0000 1.222
@@ -1522,7 +1522,7 @@
PROC ALG_tj_pfop(
BAT[oid,oid] iter,
BAT[oid,any] item,
- BAT[oid,oid] frag,
+ BAT[oid,any] frag,
BAT[oid,oid] pos) : BAT[void,bat] :=
{
var res := new(void,bat).seqbase(0...@0);
@@ -1784,6 +1784,176 @@
return res;
}
+# temporary algebra query handler
+PROC ALG_tj_ftfun_handler(
+ bit par_storeScore,
+ BAT[oid,bat] pfop_sn,
+ BAT[oid,bat] pfop_query, # == terms
+ BAT[oid,bat] pfop_opt,
+ BAT[oid,bat] pfop_ign,
+ BAT[void,any] par_loop,
+ BAT[oid,bat] par_ws,
+ BAT[oid,bat] par_scoreDB
+ ) : BAT[void,bat] :=
+{
+ var result_id;
+ var result_iter;
+ var result_item;
+ var result_pos;
+ var result_frag;
+
+ if ( true ) {
+ var xx_iter := pfop_sn.fetch(0...@0);
+ var xx_item := pfop_sn.fetch(1...@0).project(true);
+ var xx_ipik := xx_item;
+ var xx_kind := pfop_sn.fetch(2...@0).set_kind(BOOL);
+ var xx_pos := pfop_sn.fetch(3...@0);
+ # xxxxxxxxxxxxxxxxxxxxxxxxxx
+ return ALG_tj_pfop(xx_iter,xx_item,xx_kind,xx_pos.materialize(xx_ipik));
+ }
+
+ if ( verbose ) printf("# ALG_tj_ftfun_handler: START.\n");
+ if ( par_storeScore ) {
+ if ( verbose ) printf("# ALG_tj_ftfun_handler: storeScore=TRUE.\n");
+ result_id := new(void,lng).seqbase(0...@0);
+ } else {
+ if ( verbose ) printf("# ALG_tj_ftfun_handler: storeScore=FALSE.\n");
+ result_iter := new(void,oid).seqbase(0...@0);
+ result_item := new(void,oid).seqbase(0...@0);
+ result_pos := new(void,oid).seqbase(0...@0);
+ result_frag := new(void,oid).seqbase(0...@0);
+ }
+
+ var has_sn := (pfop_sn.count() > 0);
+ var has_options := (pfop_opt.count() > 0);
+
+ par_l...@batloop() {
+ var optbat;
+ if ( verbose ) printf("# ALG_tj_ftfun_handler: loop start, id=%d.\n",$t);
+ if ( has_options ) {
+ if ( verbose ) printf("# ALG_tj_ftfun_handler: running option
handler.\n");
+ var opt_iter := pfop_opt.fetch(0...@0).select($t);
+ var opt_item := pfop_opt.fetch(1...@0).semijoin(opt_iter);
+ var opt_kind := pfop_opt.fetch(2...@0).semijoin(opt_iter);
+ opt_iter := opt_iter.tmark(0...@0);
+ opt_item := opt_item.tmark(0...@0);
+ opt_kind := opt_kind.tmark(0...@0);
+ optbat :=
serialize_tijah_opt(par_ws,1,opt_iter,opt_iter,opt_item,set_kind(opt_kind,ELEM),new(void,lng),new(void,dbl),new(void,str));
+ if ( verbose ) optbat.print();
+ } else {
+ optbat := new(str,str,32);
+ }
+ if ( verbose ) printf("# ALG_tj_ftfun_handler: handle startNodes.\n");
+ var ftindex := tj_get_ft_index(optbat,true);
+ var tijah_lock := tj_get_collection_lock(ftindex);
+ lock_set(tijah_lock);
+ var err := CATCH({
+ var startNodes;
+ if ( has_sn ) {
+ var sn_iter := pfop_sn.fetch(0...@0);
+ var sn_iteration := pfop_query.fetch(0...@0).fetch(int($h));
+ sn_iter := sn_iter.select(sn_iteration);
+ var sn_item := pfop_sn.fetch(1...@0).semijoin(sn_iter);
+ var sn_kind := pfop_sn.fetch(2...@0).semijoin(sn_iter);
+ sn_item := sn_item.tmark(0...@0);
+ sn_kind := sn_kind.tmark(0...@0);
+
+ var xdoc_name := bat("tj_" + ftindex + "_doc_name");
+ var xdoc_firstpre := bat("tj_" + ftindex + "_doc_firstpre");
+ var xpfpre := bat("tj_" + ftindex + "_pfpre");
+ var doc_loaded :=
par_ws.fetch(CONT_COLL).join(bat("doc_collection").reverse()).join(bat("doc_name"));
+ if ( verbose ) printf("# ALG_tj_ftfun_handler: compute startnodes\n");
+ startNodes :=
pf2tijah_node(xdoc_name,xdoc_firstpre,xpfpre,sn_item,[int](sn_kind),doc_loaded);
+ } else {
+ startNodes := new(void,oid);
+ }
+ optbat.access(BAT_WRITE);
+ optbat.insert("_query",pfop_query.fetch(1...@0).fetch(int($h)));
+ if ( verbose ) printf("# ALG_tj_ftfun_handler: run tijah query.\n");
+ var nexi_allscores :=
run_tijah_query(ftindex,optbat,has_sn,startNodes);
+ var nexi_score;
+ if ( verbose ) printf("# ALG_tj_ftfun_handler: handling scores.\n");
+ if ( optbat.exist("returnNumber") ) {
+ var retNum := int(optbat.find("returnNumber"));
+ nexi_score := nexi_allscores.slice(0, retNum - 1);
+ } else {
+ nexi_score := nexi_allscores;
+ }
+ var docpre := bat("tj_" + ftindex + "_doc_firstpre").[oid]();
+ var pfpre := bat("tj_" + ftindex + "_pfpre");
+ var item := nexi_score.hmark(0...@0);
+ var frag := [find_lower](const docpre.reverse().mark(0...@0), item);
+ item := item.join(pfpre).sort().tmark();
+ var needed_docs := bat("tj_" + ftindex +
"_doc_name").semijoin(frag.tunique());
+ var loaded_docs := par_ws.fetch(OPEN_NAME).reverse();
+ var docs_to_load :=
kdiff(needed_docs.reverse(),loaded_docs).hmark(0...@0);
+ ws_opendoc(par_ws, docs_to_load);
+ var doc_loaded :=
reverse(par_ws.fetch(OPEN_CONT)).leftfetchjoin(par_ws.fetch(OPEN_NAME));
+ # On the forced document loading size we keep using the old interface
+ # until ws.fetch(OPEN_CONT|OPEN_DOC) disappears. This interface is
+ # much cheaper for us and works also correct when the OPEN_CONT|DOC
+ # bats are not complete.
+ # var doc_loaded :=
par_ws.fetch(CONT_COLL).join(bat("doc_collection").reverse()).join(bat("doc_name"));
+ var fid_pffid := needed_docs.join(doc_loaded.reverse());
+ frag := frag.join(fid_pffid).sort().tmark();
+ if ( verbose ) printf("# ALG_tj_ftfun_handler: handled new
frags/documents.\n");
+ if ( par_storeScore ) {
+ var tID := oid(par_scoreDB.fetch(0...@0).count() + 8888);
+
par_scoreDB.fetch(4...@0).insert(lng(tID),lng(nexi_allscores.count()));
+ par_scoreDB.fetch(0...@0).append(item.project(tID));
+ par_scoreDB.fetch(1...@0).append(frag);
+ par_scoreDB.fetch(2...@0).append(item);
+ par_scoreDB.fetch(3...@0).append(nexi_score.tmark());
+ result_id.append(lng(tID));
+ if ( verbose ) printf("# ALG_tj_ftfun_handler: stored loop score.\n");
+ } else {
+ result_iter.append(item.project($t));
+ result_pos.append(item.mark(1...@0));
+ result_frag.append(frag);
+ result_item.append(item);
+ }
+ });
+ lock_unset(tijah_lock);
+ if ( verbose ) printf("# ALG_tj_ftfun_handler: released lock.\n");
+ if (not(isnil(err))) ERROR(err);
+ if ( verbose ) printf("# ALG_tj_ftfun_handler: stored loop nodes in
result.\n");
+ if ( verbose ) printf("# ALG_tj_ftfun_handler: loop finish,
id=%d.\n",$t);
+ } # end batloop over queries
+ if ( verbose ) printf("# ALG_tj_ftfun_handler: batloop finished.\n");
+ var iter;
+ var item;
+ var ipik;
+ var kind;
+ var pos;
+ if ( par_storeScore ) {
+ if ( verbose ) printf("# ALG_tj_ftfun_handler: create int return.\n");
+ item := result_id;
+ iter := par_loop.tmark(oid(0));
+ ipik := iter;
+ pos := oid(1);
+ kind := new(oid,oid);
+ } else {
+ if ( verbose ) printf("# ALG_tj_ftfun_handler: create node return.\n");
+ iter := result_iter;
+ pos := result_pos;
+ kind := result_frag;
+ item := result_item;
+ ipik := iter;
+ }
+ if ( verbose ) {
+ printf("# ALG_tj_ftfun_handler: iter/item/kind/pos result start\n");
+ iter.print();
+ item.print();
+ kind.print();
+ pos.print();
+ printf("# ALG_tj_ftfun_handler: iter/item/kind/pos result finish\n");
+ }
+ var res := ALG_tj_pfop(iter,item,kind,pos.materialize(ipik));
+ #
+ if ( verbose ) printf("# ALG_tj_ftfun_handler: FINISH.\n");
+ return res;
+}
+
PROC ALG_tj_add_fti_tape(
str op,
BAT[oid,bat] pfop_coll,
------------------------------------------------------------------------------
_______________________________________________
Monetdb-pf-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-pf-checkins