X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=index%2Fzinfo.c;h=3d2aee8aa95095c18bf19f54c802f1945261eaf1;hb=6ba9698e88c0283e40fa5980a1a6b551fff2d597;hp=562ae67ece03b01b2af93dd66f9d170999487fad;hpb=54ddb0c5a3a8157235271665cd874576e656eed4;p=idzebra-moved-to-github.git diff --git a/index/zinfo.c b/index/zinfo.c index 562ae67..3d2aee8 100644 --- a/index/zinfo.c +++ b/index/zinfo.c @@ -1,4 +1,4 @@ -/* $Id: zinfo.c,v 1.60 2006-05-10 12:31:08 adam Exp $ +/* $Id: zinfo.c,v 1.64 2006-05-19 13:49:34 adam Exp $ Copyright (C) 1995-2006 Index Data ApS @@ -1438,8 +1438,13 @@ int zebraExplain_lookup_attr_su_any_index(ZebraExplainInfo zei, int set, int use) { struct zebSUInfoB *zsui; + int ord; assert (zei->curDatabaseInfo); + + ord = zebraExplain_lookup_attr_su(zei, 'w', set, use); + if (ord != -1) + return ord; for (zsui = zei->curDatabaseInfo->attributeDetails->SUInfo; zsui; zsui=zsui->next) if (zsui->info.which == ZEB_SU_SET_USE && @@ -1486,7 +1491,7 @@ int zebraExplain_lookup_attr_str(ZebraExplainInfo zei, int index_type, *zsui; zsui = &(*zsui)->next) if ((*zsui)->info.index_type == index_type && (*zsui)->info.which == ZEB_SU_STR - && !strcmp((*zsui)->info.u.str, str)) + && !yaz_matchstr((*zsui)->info.u.str, str)) { struct zebSUInfoB *zsui_this = *zsui; @@ -1577,6 +1582,22 @@ int zebraExplain_ord_get_occurrences(ZebraExplainInfo zei, int ord, return -1; } +zint zebraExplain_ord_get_doc_occurrences(ZebraExplainInfo zei, int ord) +{ + struct zebSUInfoB *zsui = zebraExplain_get_sui_info(zei, ord, 0, 0); + if (zsui) + return zsui->info.doc_occurrences; + return 0; +} + +zint zebraExplain_ord_get_term_occurrences(ZebraExplainInfo zei, int ord) +{ + struct zebSUInfoB *zsui = zebraExplain_get_sui_info(zei, ord, 0, 0); + if (zsui) + return zsui->info.term_occurrences; + return 0; +} + int zebraExplain_lookup_ord(ZebraExplainInfo zei, int ord, int *index_type, const char **db, @@ -1656,43 +1677,44 @@ void zebraExplain_addAttributeSet (ZebraExplainInfo zei, int set) } } -int zebraExplain_add_attr_su(ZebraExplainInfo zei, int index_type, - int set, int use) +struct zebSUInfoB *zebraExplain_add_sui_info(ZebraExplainInfo zei, + int index_type) { struct zebSUInfoB *zsui; assert (zei->curDatabaseInfo); - zebraExplain_addAttributeSet (zei, set); zsui = (struct zebSUInfoB *) nmem_malloc (zei->nmem, sizeof(*zsui)); zsui->next = zei->curDatabaseInfo->attributeDetails->SUInfo; zei->curDatabaseInfo->attributeDetails->SUInfo = zsui; zei->curDatabaseInfo->attributeDetails->dirty = 1; zei->dirty = 1; zsui->info.index_type = index_type; + zsui->info.doc_occurrences = 0; + zsui->info.term_occurrences = 0; + zsui->info.ordinal = (zei->ordinalSU)++; + return zsui; +} + +int zebraExplain_add_attr_su(ZebraExplainInfo zei, int index_type, + int set, int use) +{ + struct zebSUInfoB *zsui = zebraExplain_add_sui_info(zei, index_type); + + yaz_log(YLOG_WARN, "add_attr_su"); + zebraExplain_addAttributeSet (zei, set); zsui->info.which = ZEB_SU_SET_USE; zsui->info.u.su.set = set; zsui->info.u.su.use = use; - zsui->info.ordinal = (zei->ordinalSU)++; - zsui->info.doc_occurrences = 0; - zsui->info.term_occurrences = 0; return zsui->info.ordinal; } int zebraExplain_add_attr_str(ZebraExplainInfo zei, int index_type, const char *index_name) { - struct zebSUInfoB *zsui; + struct zebSUInfoB *zsui = zebraExplain_add_sui_info(zei, index_type); - assert (zei->curDatabaseInfo); - zsui = (struct zebSUInfoB *) nmem_malloc (zei->nmem, sizeof(*zsui)); - zsui->next = zei->curDatabaseInfo->attributeDetails->SUInfo; - zei->curDatabaseInfo->attributeDetails->SUInfo = zsui; - zei->curDatabaseInfo->attributeDetails->dirty = 1; - zei->dirty = 1; - zsui->info.index_type = index_type; zsui->info.which = ZEB_SU_STR; zsui->info.u.str = nmem_strdup(zei->nmem, index_name); - zsui->info.ordinal = (zei->ordinalSU)++; return zsui->info.ordinal; }