Changeset 27800

Show
Ignore:
Timestamp:
11.07.2013 11:40:39 (6 years ago)
Author:
kjdon
Message:

adding in sorting based on sort list, not index list

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/service/SharedSoleneGS2FieldSearch.java

    r25853 r27800  
    2525import org.greenstone.LuceneWrapper3.SharedSoleneQuery; 
    2626import org.greenstone.gsdl3.util.GSXML; 
     27import org.w3c.dom.Document; 
    2728import org.w3c.dom.Element; 
    2829import org.w3c.dom.NodeList; 
     
    3334{ 
    3435    protected static final String RANK_PARAM_RANK_VALUE = "rank"; 
     36  protected static final String SORT_ELEM = "sort"; 
    3537 
    3638    static Logger logger = Logger.getLogger(org.greenstone.gsdl3.service.SharedSoleneGS2FieldSearch.class.getName()); 
     
    5658        } 
    5759 
     60        // the search element 
     61        Element config_search = (Element) GSXML.getChildByTagName(extra_info, GSXML.SEARCH_ELEM); 
     62        Document owner = info.getOwnerDocument(); 
     63        // get out the sort fields 
     64        NodeList sort_nodes = info.getElementsByTagName(SORT_ELEM); 
     65 
     66        for (int i = 0; i < sort_nodes.getLength(); i++) 
     67          { 
     68            Element sort = (Element) sort_nodes.item(i); 
     69            String name = sort.getAttribute(GSXML.NAME_ATT); 
     70            Element node_extra = GSXML.getNamedElement(config_search, SORT_ELEM, GSXML.NAME_ATT, name); 
     71            if (node_extra == null) 
     72              { 
     73            logger.error("haven't found extra info for sort field named " + name); 
     74            continue; 
     75              } 
     76             
     77            // get the display elements if any - displayName 
     78            NodeList display_names = node_extra.getElementsByTagName(GSXML.DISPLAY_TEXT_ELEM); 
     79            if (display_names != null) 
     80              { 
     81            for (int j = 0; j < display_names.getLength(); j++) 
     82              { 
     83                Element e = (Element) display_names.item(j); 
     84                sort.appendChild(owner.importNode(e, true)); 
     85              } 
     86              } 
     87          } // for each sortfield 
    5888        // Lucene/Solr doesn't do case folding or stemming or accent folding at the  
    5989        // moment 
     
    6999    { 
    70100        super.addCustomQueryParams(param_list, lang); 
    71         /** Lucene's/Solr's rank param is based on index fields, not ranked/not */ 
     101        /** Lucene's/Solr's rank (sort) param is based on sort fields, not ranked/not */ 
    72102        createParameter(RANK_PARAM, param_list, lang); 
    73103    } 
     
    82112            // get the fields 
    83113            ArrayList<String> fields = new ArrayList<String>(); 
    84             fields.add(RANK_PARAM_RANK_VALUE); 
     114            //fields.add(RANK_PARAM_RANK_VALUE); 
    85115            ArrayList<String> field_names = new ArrayList<String>(); 
    86             field_names.add(getTextString("param.sortBy.rank", lang)); 
    87             getSortByIndexData(fields, field_names, lang); 
     116            //field_names.add(getTextString("param.sortBy.rank", lang)); 
     117            getSortData(fields, field_names, lang); 
    88118 
    89119            param = GSXML.createParameterDescription2(this.doc, name, getTextString("param." + name, lang), GSXML.PARAM_TYPE_ENUM_SINGLE, fields.get(0), fields, field_names); 
     
    97127            super.createParameter(name, param_list, lang); 
    98128        } 
    99     } 
    100  
     129 
     130    } 
     131 
     132  protected void getSortData(ArrayList<String> sort_ids, ArrayList<String> sort_names, String lang) { 
     133 
     134        Element sort_list = (Element) GSXML.getChildByTagName(this.config_info, SORT_ELEM + GSXML.LIST_MODIFIER); 
     135    NodeList sorts = sort_list.getElementsByTagName(SORT_ELEM); 
     136    int len = sorts.getLength(); 
     137    for (int i = 0; i < len; i++) 
     138      { 
     139        Element sort = (Element) sorts.item(i); 
     140        String shortname = sort.getAttribute(GSXML.SHORTNAME_ATT); 
     141        sort_ids.add(shortname); 
     142        String display_name = GSXML.getDisplayText(sort, GSXML.DISPLAY_TEXT_NAME, lang, "en"); 
     143        if (display_name.equals("")) 
     144          { 
     145        display_name = sort.getAttribute(GSXML.NAME_ATT); 
     146        if (display_name.equals("")) 
     147          { 
     148            display_name = shortname; 
     149          } 
     150          } 
     151        sort_names.add(display_name); 
     152         
     153      } 
     154     
     155  } 
    101156    protected void getSortByIndexData(ArrayList<String> index_ids, ArrayList<String> index_names, String lang) 
    102157    {