Changeset 829 for trunk


Ignore:
Timestamp:
1999-12-13T15:55:49+13:00 (24 years ago)
Author:
davidb
Message:

Support for docs/sections with more than one metavalue for a metadata name

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/gsdl/src/colservr/browsefilter.cpp

    r722 r829  
    2828/*
    2929   $Log$
     30   Revision 1.9  1999/12/13 02:55:49  davidb
     31   Support for docs/sections with more than one metavalue for a metadata name
     32
    3033   Revision 1.8  1999/10/19 03:23:39  davidb
    3134   Collection building support through web pages
     
    206209      // insert the last result in the set
    207210      if (!tmptext.empty()) resultset.push_back (tmptext);
    208      
    209       // do an intersection with the input set
    210       if (!request.docSet.empty()) {
    211     intersect (resultset, request.docSet);
    212       }
     211
     212      text_tarray offset_resultset;
     213      text_t &md_type = info["mdtype"];
     214      if (!md_type.empty())
     215    {
     216      text_t &md_offset = info["mdoffset"];
     217      if (!md_offset.empty())
     218        {
     219          text_t offsettext;
     220
     221          text_t::iterator offset_here = md_offset.begin();
     222          text_t::iterator offset_end = md_offset.end();
     223          while (offset_here != offset_end)
     224        {
     225          if (*offset_here == ';')
     226            {
     227              if (offsettext.empty())
     228            {
     229              offset_resultset.push_back ("0");
     230            }
     231              else
     232            {
     233              offset_resultset.push_back (offsettext);
     234            }
     235              offsettext.clear();
     236            }
     237          else
     238            {
     239              offsettext.push_back(*offset_here);
     240            }
     241         
     242          offset_here++;
     243        }
     244          // insert the last result in the set
     245          if (!offsettext.empty()) offset_resultset.push_back (offsettext);
     246        }
     247      else
     248        {
     249          // add 0 offset for each 'contains' entry
     250          text_tarray::iterator result_here = resultset.begin();
     251          text_tarray::iterator result_end = resultset.end();
     252          while (result_here != result_end) {
     253        offset_resultset.push_back("0");
     254        result_here++;
     255          }
     256        }
     257
     258      // do an intersection with the input set
     259      if (!request.docSet.empty()) {
     260
     261        text_tarray intersect_resultset;
     262        text_tarray intersect_offset_resultset;
     263       
     264        text_tarray::const_iterator resultset_here = resultset.begin();
     265        text_tarray::const_iterator resultset_end = resultset.end();
     266        text_tarray::const_iterator offset_resultset_here = offset_resultset.begin();
     267       
     268        while (resultset_here != resultset_end) {
     269          if (in_set (request.docSet, *resultset_here))
     270        {
     271          intersect_resultset.push_back (*resultset_here);
     272          intersect_offset_resultset.push_back (*offset_resultset_here);
     273        }
     274          resultset_here ++;
     275          offset_resultset_here ++;
     276        }
     277        resultset = intersect_resultset;
     278        offset_resultset = intersect_offset_resultset;
     279      }
     280    }
     281      else
     282    {
     283      // do an intersection with the input set
     284      if (!request.docSet.empty()) {
     285        intersect (resultset, request.docSet);
     286      }
     287    }
    213288
    214289      // create the response
     
    218293      text_tarray::iterator result_here = resultset.begin();
    219294      text_tarray::iterator result_end = resultset.end();
     295      text_tarray::iterator offset_result_here = offset_resultset.begin();
    220296
    221297      while (result_here != result_end) {
     
    223299    if (resultnum >= startresults) {
    224300      resultdoc.OID = (*result_here);
     301      if (!md_type.empty())
     302        {
     303          resultdoc.classifier_metadata_type = md_type;
     304          resultdoc.classifier_metadata_offset = offset_result_here->getint();
     305        }
    225306      response.docInfo.push_back(resultdoc);
    226307    }
     
    228309    resultnum++;
    229310    result_here++;
     311    if (!md_type.empty()) offset_result_here++;
    230312      }
    231313    }
Note: See TracChangeset for help on using the changeset viewer.