Changeset 30049

Show
Ignore:
Timestamp:
21.07.2015 05:26:46 (4 years ago)
Author:
litvinovg
Message:

While using Solr field highlighted by Solr Servlet. Also added snippets to search results while using Solr.

Location:
main/trunk/greenstone3
Files:
9 modified

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/action/DocumentAction.java

    r29922 r30049  
    871871        Element query_param_list = doc.createElement(GSXML.PARAM_ELEM + GSXML.LIST_MODIFIER); 
    872872        GSXML.addParametersToList(query_param_list, service_params); 
     873        GSXML.addParameterToList(query_param_list, "hldocOID", (String) params.get(GSParams.DOCUMENT)); 
    873874        mr_query_request.appendChild(query_param_list); 
    874875 
    875876        // do the query 
    876877        Element mr_query_response = (Element) this.mr.process(mr_query_message); 
     878                 
     879        String pathNode = GSPath.appendLink(GSXML.RESPONSE_ELEM, GSXML.NODE_CONTENT_ELEM); 
     880        Element highlighted_Node = (Element) GSXML.getNodeByPath(mr_query_response, pathNode); 
     881        if (highlighted_Node != null) 
     882        { 
     883            return highlighted_Node; 
     884        } 
    877885 
    878886        String path = GSPath.appendLink(GSXML.RESPONSE_ELEM, GSXML.TERM_ELEM + GSXML.LIST_MODIFIER); 
     
    12101218            content_element.appendChild(doc.createTextNode(remaining_text)); 
    12111219        } 
    1212  
    12131220        return content_element; 
    12141221    } 
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/action/QueryAction.java

    r29557 r30049  
    157157        Element query_response = (Element) GSXML.getChildByTagName(mr_query_response, GSXML.RESPONSE_ELEM); 
    158158        Element query_result_metadata_list = (Element) GSXML.getChildByTagName(query_response, GSXML.METADATA_ELEM + GSXML.LIST_MODIFIER); 
     159         
    159160        if (query_result_metadata_list == null) 
    160161        { 
     
    260261        Element mr_metadata_response = (Element) this.mr.process(mr_metadata_message); 
    261262 
     263        Element query_result_snippet_list = (Element) GSXML.getChildByTagName(query_response, GSXML.HL_SNIPPET_ELEM + GSXML.LIST_MODIFIER); 
     264         
    262265        // check for errors 
    263266        processErrorElements(mr_metadata_response, page_response); 
     
    266269 
    267270        Element query_result_document_list = (Element) GSXML.getChildByTagName(metadata_response, GSXML.DOC_NODE_ELEM + GSXML.LIST_MODIFIER); 
    268  
     271                 
    269272        if (query_result_document_list != null) 
    270273        { 
    271274            page_response.appendChild(doc.importNode(query_result_document_list, true)); 
    272         } 
    273  
     275            page_response.appendChild(doc.importNode(query_result_snippet_list,true)); 
     276        } 
     277         
    274278        //logger.debug("Query page:\n" + this.converter.getPrettyString(page_response)); 
    275279        //append site metadata 
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/service/AbstractGS2FieldSearch.java

    r29731 r30049  
    2222import java.util.ArrayList; 
    2323import java.util.HashMap; 
     24import java.util.List; 
     25import java.util.Map; 
    2426 
    2527import org.apache.log4j.Logger; 
     
    2729import org.greenstone.gsdl3.util.GSXML; 
    2830import org.greenstone.gsdl3.util.XMLConverter; 
    29  
    3031import org.w3c.dom.Document; 
    3132import org.w3c.dom.Element; 
     
    9293    protected boolean advanced_form_search = false; 
    9394    protected boolean raw_search = false; 
     95    //Parameters to get full field with highlighted terms 
     96    protected String hldocOID = null; 
     97    //index Field for highlighting 
     98    protected String indexField = null; 
    9499 
    95100    static Logger logger = Logger.getLogger(org.greenstone.gsdl3.service.AbstractGS2FieldSearch.class.getName()); 
     
    591596    protected Element processAnyQuery(Element request, int query_type) 
    592597    { 
     598                 
    593599        String service_name = null; 
    594600        String empty_query_test_param = null; 
     
    633639 
    634640        // Process the request parameters 
     641         
    635642        HashMap<String, Serializable> params = GSXML.extractParams(param_list, false); 
    636  
     643        //Save as variable to make it accessable from GS2SolrSearch 
     644        hldocOID = (String) params.get("hldocOID"); 
     645        //System.out.println("@@@@@Extracted hldocOID is " + hldocOID); 
    637646        // Make sure a query has been specified 
    638647        String query = (String) params.get(empty_query_test_param); 
     
    644653        // If a field hasn't been specified, use the default - for textQuery 
    645654        String field = (String) params.get(INDEX_PARAM); 
     655        //Save as variable to make it accessable from GS2SolrSearch 
     656         
    646657        if (field == null) 
    647658        { 
    648659            field = default_index; 
    649660        } 
    650  
     661        indexField = field; 
    651662        // set up the appropriate query system 
    652663        if (!setUpQueryer(params)) 
     
    668679            break; 
    669680        } 
    670  
     681         
    671682        // run the query 
    672683        Object query_result = runQuery(query); 
    673  
     684         
     685        // We want highlighted text to be returned right now! 
     686        if (hldocOID != null && does_full_field_highlighting) 
     687        { 
     688            Element nodeContentElement = result_doc.createElement(GSXML.NODE_CONTENT_ELEM); 
     689            nodeContentElement.setTextContent((String) query_result); 
     690            result.appendChild(nodeContentElement); 
     691            return result; 
     692        } 
     693         
     694             
    674695        // build up the response 
    675696 
     
    704725        } 
    705726         
    706  
     727        Map<String, Map<String, List<String>>> hlResults = null; 
     728        if (does_highlight_snippets) 
     729        { 
     730            hlResults = getHighlightSnippets(query_result); 
     731        } 
     732         
    707733        // add a metadata item to specify what actual query was done - eg if stuff was stripped out etc. and then we can use the query later, cos we don't know which parameter was the query 
    708734        GSXML.addMetadata(metadata_list, "query", query); 
     
    711737            Element document_list = result_doc.createElement(GSXML.DOC_NODE_ELEM + GSXML.LIST_MODIFIER); 
    712738            result.appendChild(document_list); 
     739            Element snippet_list = result_doc.createElement(GSXML.HL_SNIPPET_ELEM + GSXML.LIST_MODIFIER); 
     740            result.appendChild(snippet_list); 
    713741            for (int d = 0; d < docs.length; d++) 
    714742            { 
    715743                String doc_id = internalNum2OID(docs[d]); 
    716744                Element doc_node = createDocNode(result_doc, doc_id, doc_ranks[d]); 
     745                if (hlResults != null && hlResults.get(docs[d]) != null && hlResults.get(docs[d]).get(indexField) != null) { 
     746                    for (String snippet : hlResults.get(docs[d]).get(indexField)){ 
     747                        //remove html tags 
     748                        snippet = snippet.replaceAll("\\<.*?>", ""); 
     749                        //remove truncated tags 
     750                        snippet = snippet.replaceAll(".*>", ""); 
     751                        snippet = snippet.replaceAll("\\<.*", ""); 
     752                        //remove unwanted symbols at start of line 
     753                        snippet = snippet.replaceAll("^[ .,»):;-–]+", ""); 
     754                        //highlighting tags transformation 
     755                        snippet = snippet.replaceAll("&lt;", "<"); 
     756                        snippet = snippet.replaceAll("&gt;", ">"); 
     757                        Element snippet_node = result_doc.createElement(GSXML.HL_SNIPPET_ELEM); 
     758                        snippet_node.setAttribute(GSXML.NODE_ID_ATT, doc_id); 
     759                        snippet_node.setTextContent(snippet); 
     760                        snippet_list.appendChild(snippet_node); 
     761                    } 
     762                } 
    717763                document_list.appendChild(doc_node); 
    718764            } 
     
    756802        } 
    757803 
     804         
    758805        return result; 
    759806 
     
    778825    /** get the list of facets */ 
    779826    abstract protected ArrayList<FacetWrapper> getFacets(Object query_result); 
     827     
     828    /** get the map of highlighting snippets */ 
     829    abstract protected Map<String, Map<String, List<String>>> getHighlightSnippets(Object query_result); 
    780830 
    781831    /** add in term info if available */ 
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/service/AbstractSearch.java

    r29558 r30049  
    6666    /** does this service support faceting search results */ 
    6767    protected boolean does_faceting = false; 
     68    /** does this service support highlighting snippets results */ 
     69    protected boolean does_highlight_snippets = false; 
     70    protected boolean does_full_field_highlighting = false; 
    6871    /** 
    6972     * the default document type - use if all documents are the same type 
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/service/GS2LuceneSearch.java

    r29558 r30049  
    2121// Greenstone classes 
    2222import java.io.File; 
     23import java.io.Serializable; 
    2324import java.util.ArrayList; 
    2425import java.util.HashMap; 
    2526import java.util.Iterator; 
     27import java.util.List; 
    2628import java.util.Map; 
    2729import java.util.Set; 
     
    3537import org.greenstone.gsdl3.util.GSXML; 
    3638import org.greenstone.gsdl3.util.XMLConverter; 
    37  
    3839import org.w3c.dom.Document; 
    3940import org.w3c.dom.Element; 
     
    307308    return gs3_sort; 
    308309  } 
     310 
     311@Override 
     312protected Map<String, Map<String, List<String>>> getHighlightSnippets( 
     313        Object query_result) { 
     314    // TODO Auto-generated method stub 
     315    return null; 
    309316} 
     317 
     318} 
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/service/GS2MGPPSearch.java

    r29558 r30049  
    2424import java.util.HashMap; 
    2525import java.util.Iterator; 
     26import java.util.List; 
    2627import java.util.Map; 
    2728import java.util.Set; 
     
    3334import org.greenstone.gsdl3.util.GSXML; 
    3435import org.greenstone.gsdl3.util.XMLConverter; 
    35  
    3636import org.greenstone.mgpp.MGPPDocInfo; 
    3737import org.greenstone.mgpp.MGPPQueryResult; 
    3838import org.greenstone.mgpp.MGPPSearchWrapper; 
    3939import org.greenstone.mgpp.MGPPTermInfo; 
    40  
    4140import org.w3c.dom.Document; 
    4241import org.w3c.dom.Element; 
     
    358357        return null; 
    359358    } 
     359 
     360    @Override 
     361    protected Map<String, Map<String, List<String>>> getHighlightSnippets( 
     362            Object query_result) { 
     363        // TODO Auto-generated method stub 
     364        return null; 
     365    } 
    360366} 
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/util/GSXML.java

    r29522 r30049  
    168168    public static final String NODE_ID_ATT = "nodeID"; 
    169169    public static final String HREF_ID_ATT = "hrefId"; // for ids that need translating 
     170    public static final String HL_SNIPPET_ELEM = "highlightSnippet"; 
    170171    public static final String ID_MOD_ATT = "idMod"; // might hold .rt etc for hrefIds 
    171172    public static final String NODE_OID = "oid"; 
  • main/trunk/greenstone3/web/interfaces/default/style/core.css

    r29978 r30049  
    147147#searchResultsStatusBar { 
    148148    text-align:center; 
     149} 
     150 
     151.HighlightSnippet { 
     152    font-size:0.7em; 
    149153} 
    150154 
     
    208212    background:yellow; 
    209213} 
     214.snippetText{ 
     215        font-weight:bold; 
     216        font-style:italic; 
     217} 
     218 
    210219 
    211220#viewAndZoomOptions { 
  • main/trunk/greenstone3/web/interfaces/default/transform/pages/query.xsl

    r29553 r30049  
    136136                          <xsl:call-template name="documentBerryForClassifierOrSearchPage"/> 
    137137                        </td> 
    138  
     138                        <xsl:call-template name="highlightSnippet"> 
     139                            <xsl:with-param name="nodeHASH"> 
     140                                <xsl:value-of select="@nodeID"/> 
     141                            </xsl:with-param> 
     142                        </xsl:call-template> 
    139143                        <xsl:call-template name="documentNodePost"/> 
    140144                    </tr> 
     
    153157    </xsl:template> 
    154158 
     159    <xsl:template name="highlightSnippet"> 
     160        <xsl:param name="nodeHASH"> 
     161        </xsl:param> 
     162        <xsl:for-each select="/page/pageResponse/highlightSnippetList/highlightSnippet[@nodeID = $nodeHASH]"> 
     163                        <tr> 
     164                            <td> 
     165                                </td> 
     166                                <td> 
     167                                    <div class="HighlightSnippet"> 
     168                                        <xsl:value-of select="." disable-output-escaping="yes"/> 
     169                                    </div> 
     170                            </td> 
     171                    </tr> 
     172            </xsl:for-each> 
     173    </xsl:template> 
    155174    <xsl:template name="queryPage"> 
    156175        <xsl:for-each select="pageResponse/service">