X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fextract.c;h=5be148815d0c6c1c593b9f652ef5a71f48211f21;hb=3731bdaf94aeba2550fc553aebe34831c203dc36;hp=6ac93deed617740776c19d06c4d26f298a56c8d8;hpb=a479e3c7f966848a6fc71ac2c2c7f5db7068351b;p=idzebra-moved-to-github.git diff --git a/index/extract.c b/index/extract.c index 6ac93de..5be1488 100644 --- a/index/extract.c +++ b/index/extract.c @@ -1,4 +1,4 @@ -/* $Id: extract.c,v 1.268 2007-11-06 10:29:59 adam Exp $ +/* $Id: extract.c,v 1.270 2007-11-30 12:19:08 adam Exp $ Copyright (C) 1995-2007 Index Data ApS @@ -520,13 +520,29 @@ struct recordLogInfo { struct recordGroup *rGroup; }; -static void all_matches_add(struct recExtractCtrl *ctrl) +/** \brief add the always-matches index entry and map to real record ID + \param ctrl record control + \param record_id custom record ID + \param sysno system record ID + + This function serves two purposes.. It adds the always matches + entry and makes a pointer from the custom record ID (if defined) + back to the system record ID (sysno) + See zebra_recid_to_sysno . + */ +static void all_matches_add(struct recExtractCtrl *ctrl, zint record_id, + zint sysno) { RecWord word; extract_init(ctrl, &word); + word.record_id = record_id; + /* we use the seqno as placeholder for a way to get back to + record database from _ALLRECORDS.. This is used if a custom + RECORD was defined */ + word.seqno = sysno; word.index_name = "_ALLRECORDS"; word.index_type = "w"; - word.seqno = 1; + extract_add_index_string(&word, zinfo_index_category_alwaysmatches, "", 0); } @@ -874,8 +890,6 @@ ZEBRA_RES zebra_extract_record_stream(ZebraHandle zh, else end_offset = stream->tellf(stream); - all_matches_add(&extractCtrl); - if (extractCtrl.match_criteria[0]) match_criteria = extractCtrl.match_criteria; } @@ -919,6 +933,7 @@ ZEBRA_RES zebra_extract_record_stream(ZebraHandle zh, } } } + if (zebra_rec_keys_empty(zh->reg->keys)) { /* the extraction process returned no information - the record @@ -951,6 +966,15 @@ ZEBRA_RES zebra_extract_record_stream(ZebraHandle zh, *sysno = rec->sysno; + + if (stream) + { + all_matches_add(&extractCtrl, + zebra_rec_keys_get_custom_record_id(zh->reg->keys), + *sysno); + } + + recordAttr = rec_init_attr(zh->reg->zei, rec); if (extractCtrl.staticrank < 0) { @@ -992,6 +1016,13 @@ ZEBRA_RES zebra_extract_record_stream(ZebraHandle zh, rec = rec_get(zh->reg->records, *sysno); assert(rec); + + if (stream) + { + all_matches_add(&extractCtrl, + zebra_rec_keys_get_custom_record_id(zh->reg->keys), + *sysno); + } recordAttr = rec_init_attr(zh->reg->zei, rec); @@ -1716,7 +1747,6 @@ static void extract_add_icu(RecWord *p, zebra_map_t zm) key.mem[i++] = p->seqno; key.len = i; - yaz_log(YLOG_LOG, "keys_write %.*s", (int) res_len, res_buf); zebra_rec_keys_write(zh->reg->keys, res_buf, res_len, &key); p->seqno++;