mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-07 18:14:26 +00:00
[DSCR-19] Case sensitive sidebar facets
git-svn-id: http://scm.dspace.org/svn/repo/dspace/branches/dspace-1_7_x@6139 9c30dcfa-912a-0410-8fc2-9e0234be79fd
This commit is contained in:
@@ -44,6 +44,8 @@ public class SearchUtils {
|
||||
|
||||
private static List<String> dateIndexableFields = new ArrayList<String>();
|
||||
|
||||
public static final String FILTER_SEPARATOR = "|||";
|
||||
|
||||
static {
|
||||
|
||||
log.debug("loading configuration");
|
||||
@@ -190,6 +192,20 @@ public class SearchUtils {
|
||||
return dateIndexableFields;
|
||||
}
|
||||
|
||||
public static String getFilterQueryDisplay(String filterQuery){
|
||||
String separator = SearchUtils.getConfig().getString("solr.facets.split.char", SearchUtils.FILTER_SEPARATOR);
|
||||
//Escape any regex chars
|
||||
separator = java.util.regex.Pattern.quote(separator);
|
||||
String[] fqParts = filterQuery.split(separator);
|
||||
String result = "";
|
||||
int start = fqParts.length / 2;
|
||||
for(int i = start; i < fqParts.length; i++){
|
||||
result += fqParts[i];
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static class SolrFacetConfig {
|
||||
|
||||
private String facetField;
|
||||
|
@@ -700,7 +700,10 @@ public class SolrServiceImpl implements SearchService, IndexingService {
|
||||
|
||||
if(SearchUtils.getAllFacets().contains(field) || SearchUtils.getAllFacets().contains(unqualifiedField + "." + Item.ANY)){
|
||||
//Add a special filter
|
||||
doc.addField(field + "_filter", value);
|
||||
//We use a separator to split up the lowercase and regular case, this is needed to get our filters in regular case
|
||||
//Solr has issues with facet prefix and cases
|
||||
String separator = SearchUtils.getConfig().getString("solr.facets.split.char", SearchUtils.FILTER_SEPARATOR);
|
||||
doc.addField(field + "_filter", value.toLowerCase() + separator + value);
|
||||
}
|
||||
|
||||
if(SearchUtils.getSortFields().contains(field) && !sortFieldsAdded.contains(field)){
|
||||
|
@@ -37,7 +37,6 @@ import org.xml.sax.SAXException;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Serializable;
|
||||
import java.net.URLEncoder;
|
||||
import java.sql.SQLException;
|
||||
import java.util.*;
|
||||
import java.util.regex.Matcher;
|
||||
@@ -386,7 +385,7 @@ public abstract class AbstractFiltersTransformer extends AbstractDSpaceTransform
|
||||
continue;
|
||||
}
|
||||
for (FacetField.Count count : facetVals) {
|
||||
values.add(new FilterDisplayValue(count.getName(), count.getCount(), count.getAsFilterQuery()));
|
||||
values.add(new FilterDisplayValue(SearchUtils.getFilterQueryDisplay(count.getName()), count.getCount(), count.getAsFilterQuery()));
|
||||
}
|
||||
}
|
||||
if(field.isDate()){
|
||||
@@ -463,12 +462,15 @@ public abstract class AbstractFiltersTransformer extends AbstractDSpaceTransform
|
||||
if(keys != null){
|
||||
while (keys.hasMoreElements()){
|
||||
String key = (String) keys.nextElement();
|
||||
if(key != null){
|
||||
paramsQuery += key + "=" + URLEncoder.encode(request.getParameter(key), "UTF-8");
|
||||
if(key != null && !"page".equals(key)){
|
||||
String[] vals = request.getParameterValues(key);
|
||||
for(String paramValue : vals){
|
||||
paramsQuery += key + "=" + paramValue;
|
||||
paramsQuery += "&";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
filterValsList.addItem().addXref(
|
||||
contextPath +
|
||||
@@ -476,7 +478,7 @@ public abstract class AbstractFiltersTransformer extends AbstractDSpaceTransform
|
||||
"/discover?" +
|
||||
paramsQuery +
|
||||
"fq=" +
|
||||
URLEncoder.encode(filterQuery, "UTF-8"),
|
||||
filterQuery,
|
||||
displayedValue + " (" + value.getCount() + ")"
|
||||
);
|
||||
}
|
||||
|
@@ -558,7 +558,7 @@ public class SearchFacetFilter extends AbstractDSpaceTransformer implements Cach
|
||||
|
||||
//No use in selecting the same filter twice
|
||||
if(filterQueries.contains(filterQuery)){
|
||||
cell.addContent(displayedValue + " (" + value.getCount() + ")");
|
||||
cell.addContent(SearchUtils.getFilterQueryDisplay(displayedValue) + " (" + value.getCount() + ")");
|
||||
} else {
|
||||
//Add the basics
|
||||
Map<String, String> urlParams = new HashMap<String, String>();
|
||||
@@ -567,8 +567,8 @@ public class SearchFacetFilter extends AbstractDSpaceTransformer implements Cach
|
||||
//Add already existing filter queries
|
||||
url = addFilterQueriesToUrl(url);
|
||||
//Last add the current filter query
|
||||
url += "&fq=" + URLEncoder.encode(filterQuery, "UTF-8");
|
||||
cell.addXref(url, displayedValue + " (" + value.getCount() + ")"
|
||||
url += "&fq=" + filterQuery;
|
||||
cell.addXref(url, SearchUtils.getFilterQueryDisplay(displayedValue) + " (" + value.getCount() + ")"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@@ -166,6 +166,9 @@ public class SimpleSearch extends AbstractSearch implements CacheableProcessingC
|
||||
if(field.equals("location.comm") || field.equals("location.coll")){
|
||||
//We have a community/collection, resolve it to a dspaceObject
|
||||
value = SolrServiceImpl.locationToName(context, field, value);
|
||||
} else
|
||||
if(field.endsWith("_filter")){
|
||||
value = SearchUtils.getFilterQueryDisplay(value);
|
||||
}
|
||||
//Check for a range query
|
||||
Pattern pattern = Pattern.compile("\\[(.*? TO .*?)\\]");
|
||||
|
@@ -480,7 +480,7 @@
|
||||
<!--Treats the entire field as a single token, regardless of its content-->
|
||||
<tokenizer class="solr.KeywordTokenizerFactory"/>
|
||||
|
||||
<filter class="solr.LowerCaseFilterFactory" />
|
||||
<!--<filter class="solr.LowerCaseFilterFactory" />-->
|
||||
</analyzer>
|
||||
</fieldType>
|
||||
</types>
|
||||
|
Reference in New Issue
Block a user