Ignore:
Timestamp:
2015-07-21T05:26:46+12:00 (9 years ago)
Author:
Georgiy Litvinov
Message:

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

Location:
main/trunk/greenstone3
Files:
9 edited

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">
Note: See TracChangeset for help on using the changeset viewer.