Changeset 31570


Ignore:
Timestamp:
2017-04-03T23:04:19+12:00 (7 years ago)
Author:
davidb
Message:

Solr-stream based search

Location:
other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal
Files:
1 added
3 edited

Legend:

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

    r31524 r31570  
     1table.query-table tr td {
     2    padding-top: 4px;
     3    padding-bottom: 4px;
     4    padding-right: 6px;
     5}
     6
    17.show-hide-lang {
    28    display: none;
  • other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/index.html

    r31524 r31570  
    294294           
    295295    <div class="container">
    296       <h4>Admin Resources</h4>
     296      <h4>Additional Resources</h4>
    297297      <ul>
     298    <li><a href="stream-query.html">Combined Volume Metadata and Page-levelPOS Term searching</a></li>
    298299    <li><a href="admin.html">HTRC-EF Solr Admin UI (log in)</a></li>
    299300    <li><a href="luke_lang_mappings.html">Dynamically Generated Language Map (Part-of-Speech, and Other)</a></li>
  • other-projects/hathitrust/wcsa/extracted-features-solr/trunk/web-portal/index.js

    r31524 r31570  
    5757}
    5858
     59function stream_generate_item(line,id,title)
     60{
     61    var css_class = (line%2 == 0) ? 'class="evenline"' : 'class="oddline"';
     62   
     63    var html_item = "";
     64
     65
     66    var babel_url = "https://babel.hathitrust.org/cgi/pt?id="+id+";view=1up;seq="+0;
     67
     68    html_item += '<p ' + css_class + '>';
     69    //html_item += ' <span style="font-style: italic;" name="'+id+'"></span><br>';
     70    html_item += '<a target="_blank" href="' + babel_url + '">' + id + ': ' + title + '</a>';
     71    html_item += '</p>';
     72
     73    return html_item;
     74}
     75
    5976
    6077function generate_item(line,id,id_pages)
     
    105122}
    106123
    107 function show_results(jsonData) {
    108     var response = jsonData.response;
    109     var num_found = response.numFound;
    110     var docs = response.docs;
    111     var num_docs = docs.length;
     124function stream_show_results(jsonData) {
     125    var docs = jsonData["result-set"].docs;
     126    var num_docs = docs.length -1;
    112127
    113128    $('.search-in-progress').css("cursor","auto");
     
    116131
    117132    if (num_docs>0) {
    118     $search_results.html("<p>Results: " + num_found + " pages matched</p>");
     133    $search_results.html("<p>Results: " + num_docs + " volumes matched</p>");
     134    /*
    119135    var from = parseInt(store_search_args.start);
    120136    var to = from + num_rows;
    121137    $search_results.append("<p>Showing matches: "+from+"-" + to + "</p>");
     138    */
    122139    }
    123140    else {
    124     $search_results.html("<p>No pages matched your query</p>");
    125     }
    126 
    127    
    128     // https://babel.hathitrust.org/cgi/pt?id=hvd.hnnssu;view=1up;seq=11
    129 
     141    $search_results.html("<p>No volumes matched your query</p>");
     142    }
     143
     144    for (var i=0; i<num_docs; i++) {
     145    var doc = docs[i];
     146    var id = doc.id;
     147    var title = doc.title_t;
     148
     149    var html_item = stream_generate_item(i,id,title);
     150    $search_results.append(html_item);
     151    }
     152    return;
     153    // ****
     154   
    130155    var htids = [];
    131156
     
    155180    }
    156181   
    157 //  var css_class = (i%2 == 0) ? 'class="evenline"' : 'class="oddline"';
    158 //  //var restful_safe_id = id.replace(/\./g,",").replace(/:/g, "+").replace(/\//g, "=");
    159    
    160 //  var babel_url = "https://babel.hathitrust.org/cgi/pt?id="+id+";view=1up;seq="+seqnum;
    161 
    162 //  var result_item = '<a target="_blank" href="' + babel_url + '">' + id + ', page ' + page + '</a>';
    163 //  result_item += ' <span style="font-style: italic;" name="'+id+'"><span style="cursor: progress;">Loading ...</span></span>';
    164 //  $search_results.append('<p ' + css_class + '>'+result_item+'</p>');
    165 
    166182    htids.push("htid:"+id);
    167183
     
    203219}
    204220
     221
     222function show_results(jsonData) {
     223    var response = jsonData.response;
     224    var num_found = response.numFound;
     225    var docs = response.docs;
     226    var num_docs = docs.length;
     227
     228    $('.search-in-progress').css("cursor","auto");
     229   
     230    var $search_results = $('#search-results');
     231
     232    if (num_docs>0) {
     233    $search_results.html("<p>Results: " + num_found + " pages matched</p>");
     234    var from = parseInt(store_search_args.start);
     235    var to = from + num_rows;
     236    $search_results.append("<p>Showing matches: "+from+"-" + to + "</p>");
     237    }
     238    else {
     239    $search_results.html("<p>No pages matched your query</p>");
     240    }
     241
     242   
     243    // https://babel.hathitrust.org/cgi/pt?id=hvd.hnnssu;view=1up;seq=11
     244
     245    var htids = [];
     246
     247    var prev_id = null;
     248    var prev_pages = [];
     249   
     250    var i=0;
     251    var line_num = 0;
     252    while (i<num_docs) {
     253//    for (var i=0; i<num_docs; i++) {
     254    var doc = docs[i];
     255    var id_and_page = doc.id.split(".page-");
     256    var id = id_and_page[0];
     257    var seqnum = parseInt(id_and_page[1]);
     258    var page = seqnum+1;
     259
     260    if ((prev_id != null) && (id != prev_id)) {
     261        // time to output previous item
     262        var html_item = generate_item(line_num,prev_id,prev_pages);
     263        $search_results.append(html_item);
     264        line_num++;
     265        prev_pages = [page];
     266    }
     267    else {
     268        // accumulate pages
     269        prev_pages.push(page)
     270    }
     271   
     272//  var css_class = (i%2 == 0) ? 'class="evenline"' : 'class="oddline"';
     273//  //var restful_safe_id = id.replace(/\./g,",").replace(/:/g, "+").replace(/\//g, "=");
     274   
     275//  var babel_url = "https://babel.hathitrust.org/cgi/pt?id="+id+";view=1up;seq="+seqnum;
     276
     277//  var result_item = '<a target="_blank" href="' + babel_url + '">' + id + ', page ' + page + '</a>';
     278//  result_item += ' <span style="font-style: italic;" name="'+id+'"><span style="cursor: progress;">Loading ...</span></span>';
     279//  $search_results.append('<p ' + css_class + '>'+result_item+'</p>');
     280
     281    htids.push("htid:"+id);
     282
     283    prev_id = id;
     284    i++;
     285    }
     286   
     287    var html_item = generate_item(line_num,prev_id,prev_pages);
     288    $search_results.append(html_item);
     289
     290   
     291    document.location.href="#search-results-anchor";
     292   
     293    var next_prev = '<p style="width:100%;"><div id="search-prev" style="float: left;"><a>&lt; Previous</a></div><div id="search-next" style="float: right;"><a>Next &gt;</a></div></p>';
     294   
     295    $search_results.append(next_prev);
     296    $('#search-prev').click(function(event) { show_new_results(-1*num_rows); });
     297    $('#search-next').click(function(event) { show_new_results(num_rows); });
     298
     299    var search_start = store_search_args.start;
     300    if (search_start==0) {
     301    $('#search-prev').hide();
     302    }
     303   
     304    // Example URL for catalog metadata (multiple items)
     305    // http://catalog.hathitrust.org/api/volumes/brief/json/id:552;lccn:70628581|isbn:0030110408
     306
     307    var htids_str = htids.join("|",htids);
     308    var cat_url = "http://catalog.hathitrust.org/api/volumes/brief/json/" + htids_str;
     309        $.ajax({
     310        url: cat_url,
     311        dataType: 'jsonp',
     312        jsonpCallback: "add_titles"
     313    });
     314
     315
     316    //var json_pretty = JSON.stringify(jsonData.response, null, '\t');
     317    //$('#search-results').text(json_pretty)
     318}
     319
    205320var store_search_args = null;
    206321var store_search_action = null;
    207322
    208323var group_by_vol_checked = 0;
     324
     325function stream_submit_action(event)
     326{
     327    event.preventDefault();
     328
     329    $('.search-in-progress').css("cursor","wait");
     330
     331    var vq_text     = $('#vq').val();
     332   
     333    store_search_action = $('#search-form').attr("action");
     334   
     335    var arg_indent = $('#indent').attr('value');
     336    var arg_wt     = $('#wt').attr('value');
     337    var arg_start  = $('#start').attr('value');
     338    var arg_rows   = $('#rows').attr('value');
     339    var q_text     = $('#q').val();
     340
     341    group_by_vol_checked = $('#group-results-by-id:checked').length;
     342
     343   
     344    if ((q_text === "") && (vq_text === "")) {
     345    $('.search-in-progress').css("cursor","auto");
     346    alert("No query term entered");
     347    return;
     348    }
     349
     350    var expr_all = "";
     351    var expr_md = "";
     352    var expr_tx = "";
     353   
     354    if (vq_text !== "") {
     355    // simplified case of issuing a volume-based metadata query
     356    //expr=search(col,q,fl,sort,rows)
     357
     358   
     359    //var expr = "expr=search(";
     360    expr_md = "search(";
     361    expr_md += "htrc-full-ef20";
     362    expr_md += ",q=\""+vq_text+"\"";
     363    expr_md += ",fl=\"volumeid_s,id,title_t\"";
     364    expr_md += ",sort=\"id asc"+"\"";
     365    expr_md += ",indent=\""+arg_indent+"\"";
     366    expr_md += ",wt=\""+arg_wt+"\"";
     367    expr_md += ",start=\""+arg_start+"\"";
     368    expr_md += ",rows=\""+arg_rows+"\"";
     369    expr_md += ")";
     370   
     371    store_search_args = { q: vq_text, indent: arg_indent, wt: arg_wt,
     372                  start: arg_start, rows: arg_rows };
     373    }
     374
     375    if (q_text !== "") {
     376   
     377    var fields = [];
     378    var universal_pos_tags = [ "VERB", "NOUN", "ADJ", "ADV", "ADP", "CONJ", "DET", "NUM", "PRT", "X" ];
     379
     380    var arg_q = "";
     381   
     382    var split_q_text = q_text.split(/\s+/);
     383    for (var qi=0; qi<split_q_text.length; qi++) {
     384        q_text = split_q_text[qi];
     385       
     386        for (var li=0; li<langs_with_pos.length; li++) {
     387        var lang = langs_with_pos[li];
     388        var lang_enabled_id = lang + "-enabled";
     389        var $lang_enabled_cb = $('#'+lang_enabled_id);
     390        if ($lang_enabled_cb.is(':checked')) {
     391            console.log("Extracting POS tags for: " + lang);
     392           
     393            for (var ti=0; ti<universal_pos_tags.length; ti++) {
     394            var tag = universal_pos_tags[ti];
     395            var lang_tag_id = lang+"-"+tag+"-htrctoken-cb";
     396            var $lang_tag_cb = $('#'+lang_tag_id);
     397            if ($lang_tag_cb.is(':checked')) {
     398                //var lang_tag_field = "xxxx"+lang+"_"+tag+"_htrctoken";
     399                var lang_tag_field = lang+"_"+tag+"_htrctoken";
     400                fields.push(lang_tag_field+":"+q_text);
     401            }
     402            }
     403        }
     404        }
     405       
     406        for (var li=0; li<langs_without_pos.length; li++) {
     407        var lang = langs_without_pos[li];
     408        var lang_enabled_id = lang + "-enabled";
     409        var $lang_enabled_cb = $('#'+lang_enabled_id);
     410       
     411        if ($lang_enabled_cb.is(':checked')) {
     412            console.log("Adding in non-POS field for: " + lang);
     413            //var lang_tag_field = "xxxx"+lang+"_htrctoken";
     414            var lang_tag_field = lang+"_htrctoken";
     415            fields.push(lang_tag_field+":"+q_text);     
     416        }
     417        }
     418   
     419        if (fields.length == 0) {
     420        alert("No languages selected");
     421        return;
     422        }
     423
     424        if (qi>0) {
     425        arg_q += " OR ";
     426        }
     427       
     428        arg_q += fields.join(" OR ");
     429   
     430    } // end of for each split q_text
     431   
     432    // Example search on one of the htrc-full-ef fields is:
     433    //  q=en_NOUN_htrctoken:farming
     434   
     435    store_search_args = { q: arg_q, indent: arg_indent, wt: arg_wt, start: arg_start, rows: arg_rows };
     436
     437    store_search_args.sort="id asc";
     438    store_search_args.fl="volumeid_s,id";
     439   
     440    var expr_tx = "search(htrc-full-ef20";
     441   
     442    for (var k in store_search_args) {
     443        if (store_search_args.hasOwnProperty(k)) {
     444        var v = store_search_args[k];
     445        expr_tx += "," + k + "=\"" + v + "\"";
     446        }
     447    }
     448    expr_tx += ")";
     449    }
     450   
     451
     452    if ((expr_md != "") && (expr_tx != "")) {
     453    expr = "expr=intersect(" + expr_md + "," + expr_tx  + ", on=\"id=volumeid_s\")";
     454    }
     455    else if (expr_md != "") {
     456    expr = "expr=" + expr_md;
     457    }
     458    else if (expr_tx != "") {
     459    expr = "expr=" + expr_tx;
     460    }
     461    else {
     462    // both empty
     463    console.log("Warning: query was empty");
     464    }
     465   
     466
     467    $.ajax({
     468    type: 'GET',
     469    url: store_search_action,
     470    data: expr,
     471    dataType: 'json',
     472    success: stream_show_results,
     473    error: ajax_error
     474    });
     475
     476}
    209477
    210478function submit_action(event)
     
    437705
    438706    generate_other_langs();
    439    
    440     $('#search-submit').click(submit_action);
     707
     708    if ($('#search-submit').length>0) {
     709    $('#search-submit').click(submit_action);
     710    }
     711   
     712    if ($('#stream-search-submit').length>0) {
     713    $('#stream-search-submit').click(stream_submit_action);
     714    }
    441715
    442716});
Note: See TracChangeset for help on using the changeset viewer.