Show
Ignore:
Timestamp:
21.04.2017 01:02:28 (2 years ago)
Author:
davidb
Message:

Combined volume md and full-text page searching

Location:
other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/index.html

    r31623 r31624  
    173173        <input type="hidden" id="rows" name="rows" value="20"/> 
    174174 
     175        <!-- 
    175176        <input type="text"   class="search-in-progress" id="q" name="q" style="width: 600px;"/> 
    176         <input type="submit" class="search-in-progress" id="search-submit" /> 
     177        <input type="submit" class="search-in-progress" id="search-submit" />        
    177178        <br> 
    178           <input type="checkbox" id="group-results-by-id" name="group-results-by-vol" value="on">Group by Volume 
    179           <input type="checkbox" id="search-all-langs"    name="search-all-langs"     value="on">Search all Languages 
     179        --> 
    180180         
    181         <div id="pos-fieldsets"> 
    182         </div>       
    183  
    184         <fieldset class="show-hide-lang"> 
    185           <legend style="margin-bottom: 5px; padding-top: 15px;"> 
    186             Other Languages (without modelled parts-of-speech) 
    187           </legend> 
    188           <div id="other-langs"> 
    189           </div> 
    190         </fieldset> 
    191  
     181        <table class="query-table"> 
     182          <tr> 
     183            <td>Volume Metadata:</td> 
     184            <td><input type="text"   class="search-in-progress" id="vq" name="vq" 
     185                   placeholder="metaname:metavalue e.g., title_t:farming" 
     186                   style="width: 600px;"/><br /> 
     187              <input type="checkbox" id="search-all-vfields" name="search-all-vfields" value="on">&nbsp;Search all volume fields 
     188            </td> 
     189          </tr> 
     190          <tr> 
     191            <td></td> 
     192            <td style="color: #aaaaaa; width: 400px; font-size: 14px; line-height: 16px; padding-bottom: 10px;"> 
     193              Indexed volume metadata fields: accessProfile_t, genre_t, 
     194              imprint_t, isbn_t, issn_t, issuance_t, 
     195              language_t, lccn_t, names_t, oclc_t, 
     196              pubPlace_t, pubDate_t, rightsAttributes_t, 
     197              title_t, typeOfResource_t 
     198            </td> 
     199          </tr> 
     200          <tr> 
     201            <td>Page-level text:</td> 
     202            <td> 
     203              <input type="text"   class="search-in-progress" id="q" name="q" 
     204                 style="width: 600px;"/><br /> 
     205              <input type="checkbox" id="group-results-by-id" name="group-results-by-vol" value="on">&nbsp;<span>Group by Volume</span> 
     206 
     207            </td> 
     208          </tr> 
     209          <tr> 
     210            <td></td> 
     211            <td > 
     212              <input type="submit" class="search-in-progress" id="search-submit" style="float: right;"/> 
     213            </td> 
     214          </tr> 
     215        </table> 
     216 
     217                 
     218 
     219        <div> 
     220          <input type="checkbox" id="search-all-langs"    name="search-all-langs"     value="on">&nbsp;Search all Languages 
     221         
     222          <div id="pos-fieldsets"> 
     223          </div>         
     224           
     225          <fieldset class="show-hide-lang"> 
     226            <legend style="margin-bottom: 5px; padding-top: 15px;"> 
     227              Other Languages (without modelled parts-of-speech) 
     228            </legend> 
     229            <div id="other-langs"> 
     230            </div> 
     231          </fieldset> 
     232        </div> 
     233         
    192234          </form> 
    193235 
     
    215257    <li><a href="admin.html">HTRC-EF Solr Admin UI (log in)</a></li> 
    216258    <li><a href="luke_lang_mappings.html">Dynamically Generated Language Map (Part-of-Speech, and Other)</a></li> 
    217     <!-- 
    218     <li><a href="/solr/htrc-full-ef_shard6_replica1/admin/luke">Luke XML on shard</a></li> 
    219 --> 
    220259    <li><a href="/solr/htrc-full-ef20_shard6_replica1/admin/luke">Luke XML on shard</a></li> 
    221260      </ul> 
  • other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/index.js

    r31619 r31624  
    7272    var page = id_pages[pi]; 
    7373     
    74     var seqnum = page; 
     74    var seqnum = (page==0) ? 1 : page; 
    7575    var babel_url = "https://babel.hathitrust.org/cgi/pt?id="+id+";view=1up;seq="+seqnum; 
    7676 
     
    8181        html_item += '<span style="font-style: italic;" name="' 
    8282                     +id+'"><span style="cursor: progress;">Loading ...</span></span><br>'; 
    83  
    84         html_item += id + ': <a target="_blank" href="' + babel_url + '">seq ' + seqnum + '</a> '; 
     83        if (page > 0) { 
     84            html_item += id + ': <a target="_blank" href="' + babel_url + '">seq ' + seqnum + '</a> '; 
     85        } 
     86        else { 
     87            // skip linking to the 'phony' page 0 
     88            html_item += id; 
     89        } 
    8590        } 
    8691        else { 
     
    9297        html_item += ' <span style="font-style: italic;" name="' 
    9398                 +id+'"><span style="cursor: progress;">Loading ...</span></span><br>'; 
    94         html_item += '<a target="_blank" href="' + babel_url + '">' + id + ', seq ' + seqnum + '</a>'; 
     99 
     100        if (page > 0) { 
     101        html_item += '<a target="_blank" href="' + babel_url + '">' + id + ', seq ' + seqnum + '</a>'; 
     102        } 
     103        else { 
     104        html_item += '<a target="_blank" href="' + babel_url + '">' + id + ', all pages</a>'; 
     105        } 
     106         
    95107        html_item += '</p>'; 
    96108    } 
     
    141153    var id_and_page = doc.id.split(".page-"); 
    142154    var id = id_and_page[0]; 
    143     var seqnum = parseInt(id_and_page[1]) +1; // fix up ingest error 
     155    var seqnum; 
     156    if (id_and_page.length>1) { 
     157        seqnum = parseInt(id_and_page[1]) +1; // fix up ingest error 
     158    } 
     159    else { 
     160        seqnum = 0; 
     161    } 
    144162    var page = seqnum; 
    145163 
     
    195213 
    196214var group_by_vol_checked = 0; 
     215 
     216function expand_vfield(q_term,all_vfields) 
     217{ 
     218    var vfields = []; 
     219    var metadata_fields = [  "accessProfile_t", "genre_t", "imprint_t", "isbn_t", "issn_t", 
     220                 "issuance_t", "language_t", "lccn_t", "names_t", "oclc_t", 
     221                 "pubPlace_t", "pubDate_t", "rightsAttributes_t", "title_t", "typeOfResource_t"  ]; 
     222     
     223    if (all_vfields) { 
     224    for (var fi=0; fi<metadata_fields.length; fi++) { 
     225        var vfield = metadata_fields[fi]; 
     226        vfields.push(vfield+":"+q_term); 
     227    } 
     228    } 
     229    else { 
     230    if (q_term.match(/:/)) { 
     231        vfields.push(q_term); 
     232    } 
     233    else { 
     234        // make searching by title the default 
     235        vfields.push("title_t:"+q_term); 
     236    } 
     237    } 
     238     
     239 
     240    var vfields_str = vfields.join(" OR "); 
     241     
     242    return vfields_str; 
     243} 
     244 
     245function expand_vquery_field_and_boolean(query,all_vfields) 
     246{ 
     247    // boolean terms 
     248    //  => pos and lang field 
     249    if (query === "") { return "" } 
     250     
     251    var query_terms = query.split(/\s+/); 
     252    var query_terms_len = query_terms.length; 
     253 
     254    var bool_query_term = []; 
     255 
     256    var i=0; 
     257    var prev_bool = ""; 
     258 
     259    for (var i=0; i<query_terms_len; i++) { 
     260    var term = query_terms[i]; 
     261    if (term.match(/^(and|or)$/i)) { 
     262        prev_bool = term.toUpperCase();      
     263    } 
     264    else { 
     265        if (i>0) { 
     266        if (prev_bool == "") { 
     267            prev_bool = "AND"; 
     268        } 
     269        } 
     270         
     271        var expanded_term = expand_vfield(term,all_vfields); // **** only difference to POS version 
     272         
     273        term = "(" + expanded_term + ")"; 
     274 
     275        if (prev_bool != "") { 
     276        bool_query_term.push(prev_bool); 
     277        prev_bool = ""; 
     278        } 
     279        bool_query_term.push(term); 
     280    } 
     281    } 
     282 
     283    var bool_query = bool_query_term.join(" "); 
     284 
     285    return bool_query; 
     286} 
    197287 
    198288 
     
    242332    // boolean terms 
    243333    //  => pos and lang field 
     334    if (query === "") { return "" } 
    244335     
    245336    var query_terms = query.split(/\s+/); 
     
    293384    var arg_start  = $('#start').attr('value'); 
    294385    var arg_rows   = $('#rows').attr('value'); 
     386 
    295387    var q_text     = $('#q').val(); 
    296  
     388    var vq_text     = $('#vq').val(); 
     389     
    297390    group_by_vol_checked = $('#group-results-by-id:checked').length; 
    298     var search_all_checked = $('#search-all-langs:checked').length; 
    299      
    300     if (q_text === "") { 
     391 
     392    var search_all_langs_checked = $('#search-all-langs:checked').length; 
     393    var search_all_vfields_checked = $('#search-all-vfields:checked').length; 
     394     
     395    if ((q_text === "") && (vq_text === "")) { 
    301396    $('.search-in-progress').css("cursor","auto"); 
    302     alert("No query term entered"); 
     397    alert("No query term(s) entered"); 
    303398    return; 
    304399    } 
    305400 
    306     arg_q = expand_query_field_and_boolean(q_text,langs_with_pos,langs_without_pos,search_all_checked); 
    307  
     401    arg_vq = expand_vquery_field_and_boolean(vq_text,search_all_vfields_checked); 
     402     
     403    arg_q = expand_query_field_and_boolean(q_text,langs_with_pos,langs_without_pos,search_all_langs_checked); 
     404 
     405    //console.log("*** arg_vq = " + arg_vq); 
     406    //console.log("*** arg_q = " + arg_q); 
     407     
    308408    if (arg_q == "") { 
    309     $('.search-in-progress').css("cursor","auto"); 
    310     alert("No languages selected"); 
    311     return; 
    312     } 
    313      
     409    if (arg_vq == "") { 
     410        // arg_vq was empty to start with, but attempt to expand non-empty arg_q 
     411        //   lead to an empty arg_q being returned 
     412        $('.search-in-progress').css("cursor","auto"); 
     413        alert("No languages selected"); 
     414        return; 
     415    } 
     416    else { 
     417        arg_q = arg_vq; 
     418    } 
     419    } 
     420    else { 
     421    if (arg_vq != "") { 
     422        // join the two with an AND 
     423        arg_q = "(" + arg_vq + ")" + " OR " + "(" + arg_q + ")"; 
     424 
     425        // also implies 
     426        group_by_vol_checked = true; 
     427    } 
     428    } 
     429 
     430    //console.log("*** NOW arg_q = " + arg_q); 
    314431     
    315432    // Example search on one of the htrc-full-ef fields is: