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>();
|
private static List<String> dateIndexableFields = new ArrayList<String>();
|
||||||
|
|
||||||
|
public static final String FILTER_SEPARATOR = "|||";
|
||||||
|
|
||||||
static {
|
static {
|
||||||
|
|
||||||
log.debug("loading configuration");
|
log.debug("loading configuration");
|
||||||
@@ -190,6 +192,20 @@ public class SearchUtils {
|
|||||||
return dateIndexableFields;
|
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 {
|
public static class SolrFacetConfig {
|
||||||
|
|
||||||
private String facetField;
|
private String facetField;
|
||||||
|
@@ -700,7 +700,10 @@ public class SolrServiceImpl implements SearchService, IndexingService {
|
|||||||
|
|
||||||
if(SearchUtils.getAllFacets().contains(field) || SearchUtils.getAllFacets().contains(unqualifiedField + "." + Item.ANY)){
|
if(SearchUtils.getAllFacets().contains(field) || SearchUtils.getAllFacets().contains(unqualifiedField + "." + Item.ANY)){
|
||||||
//Add a special filter
|
//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)){
|
if(SearchUtils.getSortFields().contains(field) && !sortFieldsAdded.contains(field)){
|
||||||
|
@@ -37,7 +37,6 @@ import org.xml.sax.SAXException;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.net.URLEncoder;
|
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
@@ -386,7 +385,7 @@ public abstract class AbstractFiltersTransformer extends AbstractDSpaceTransform
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for (FacetField.Count count : facetVals) {
|
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()){
|
if(field.isDate()){
|
||||||
@@ -463,9 +462,12 @@ public abstract class AbstractFiltersTransformer extends AbstractDSpaceTransform
|
|||||||
if(keys != null){
|
if(keys != null){
|
||||||
while (keys.hasMoreElements()){
|
while (keys.hasMoreElements()){
|
||||||
String key = (String) keys.nextElement();
|
String key = (String) keys.nextElement();
|
||||||
if(key != null){
|
if(key != null && !"page".equals(key)){
|
||||||
paramsQuery += key + "=" + URLEncoder.encode(request.getParameter(key), "UTF-8");
|
String[] vals = request.getParameterValues(key);
|
||||||
paramsQuery += "&";
|
for(String paramValue : vals){
|
||||||
|
paramsQuery += key + "=" + paramValue;
|
||||||
|
paramsQuery += "&";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -476,7 +478,7 @@ public abstract class AbstractFiltersTransformer extends AbstractDSpaceTransform
|
|||||||
"/discover?" +
|
"/discover?" +
|
||||||
paramsQuery +
|
paramsQuery +
|
||||||
"fq=" +
|
"fq=" +
|
||||||
URLEncoder.encode(filterQuery, "UTF-8"),
|
filterQuery,
|
||||||
displayedValue + " (" + value.getCount() + ")"
|
displayedValue + " (" + value.getCount() + ")"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@@ -558,7 +558,7 @@ public class SearchFacetFilter extends AbstractDSpaceTransformer implements Cach
|
|||||||
|
|
||||||
//No use in selecting the same filter twice
|
//No use in selecting the same filter twice
|
||||||
if(filterQueries.contains(filterQuery)){
|
if(filterQueries.contains(filterQuery)){
|
||||||
cell.addContent(displayedValue + " (" + value.getCount() + ")");
|
cell.addContent(SearchUtils.getFilterQueryDisplay(displayedValue) + " (" + value.getCount() + ")");
|
||||||
} else {
|
} else {
|
||||||
//Add the basics
|
//Add the basics
|
||||||
Map<String, String> urlParams = new HashMap<String, String>();
|
Map<String, String> urlParams = new HashMap<String, String>();
|
||||||
@@ -567,8 +567,8 @@ public class SearchFacetFilter extends AbstractDSpaceTransformer implements Cach
|
|||||||
//Add already existing filter queries
|
//Add already existing filter queries
|
||||||
url = addFilterQueriesToUrl(url);
|
url = addFilterQueriesToUrl(url);
|
||||||
//Last add the current filter query
|
//Last add the current filter query
|
||||||
url += "&fq=" + URLEncoder.encode(filterQuery, "UTF-8");
|
url += "&fq=" + filterQuery;
|
||||||
cell.addXref(url, displayedValue + " (" + value.getCount() + ")"
|
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")){
|
if(field.equals("location.comm") || field.equals("location.coll")){
|
||||||
//We have a community/collection, resolve it to a dspaceObject
|
//We have a community/collection, resolve it to a dspaceObject
|
||||||
value = SolrServiceImpl.locationToName(context, field, value);
|
value = SolrServiceImpl.locationToName(context, field, value);
|
||||||
|
} else
|
||||||
|
if(field.endsWith("_filter")){
|
||||||
|
value = SearchUtils.getFilterQueryDisplay(value);
|
||||||
}
|
}
|
||||||
//Check for a range query
|
//Check for a range query
|
||||||
Pattern pattern = Pattern.compile("\\[(.*? TO .*?)\\]");
|
Pattern pattern = Pattern.compile("\\[(.*? TO .*?)\\]");
|
||||||
|
@@ -480,7 +480,7 @@
|
|||||||
<!--Treats the entire field as a single token, regardless of its content-->
|
<!--Treats the entire field as a single token, regardless of its content-->
|
||||||
<tokenizer class="solr.KeywordTokenizerFactory"/>
|
<tokenizer class="solr.KeywordTokenizerFactory"/>
|
||||||
|
|
||||||
<filter class="solr.LowerCaseFilterFactory" />
|
<!--<filter class="solr.LowerCaseFilterFactory" />-->
|
||||||
</analyzer>
|
</analyzer>
|
||||||
</fieldType>
|
</fieldType>
|
||||||
</types>
|
</types>
|
||||||
|
Reference in New Issue
Block a user