diff --git a/dspace-api/src/main/java/org/dspace/discovery/SearchUtils.java b/dspace-api/src/main/java/org/dspace/discovery/SearchUtils.java index 1ccf56e80a..a409b75e1a 100644 --- a/dspace-api/src/main/java/org/dspace/discovery/SearchUtils.java +++ b/dspace-api/src/main/java/org/dspace/discovery/SearchUtils.java @@ -67,6 +67,11 @@ public class SearchUtils { return manager.getServiceByName(DiscoveryConfigurationService.class.getName(), DiscoveryConfigurationService.class); } + public static List getIgnoredMetadataFields(int type) + { + return getConfigurationService().getToIgnoreMetadataFields().get(type); + } + /** * Method that retrieves a list of all the configuration objects from the given item * A configuration object can be returned for each parent community/collection diff --git a/dspace-api/src/main/java/org/dspace/discovery/SolrServiceImpl.java b/dspace-api/src/main/java/org/dspace/discovery/SolrServiceImpl.java index 8b844317bd..ca88de1886 100644 --- a/dspace-api/src/main/java/org/dspace/discovery/SolrServiceImpl.java +++ b/dspace-api/src/main/java/org/dspace/discovery/SolrServiceImpl.java @@ -82,7 +82,7 @@ public class SolrServiceImpl implements SearchService, IndexingService { public static final String STORE_SEPARATOR = "\n|||\n"; public static final String VARIANTS_STORE_SEPARATOR = "###"; - + /** * Non-Static CommonsHttpSolrServer for processing indexing events. */ @@ -636,11 +636,12 @@ public class SolrServiceImpl implements SearchService, IndexingService { String rights = community.getMetadata("copyright_text"); String title = community.getMetadata("name"); - addContainerMetadataField(doc, highlightedMetadataFields, "dc.description", description); - addContainerMetadataField(doc, highlightedMetadataFields, "dc.description.abstract", description_abstract); - addContainerMetadataField(doc, highlightedMetadataFields, "dc.description.tableofcontents", description_table); - addContainerMetadataField(doc, highlightedMetadataFields, "dc.rights", rights); - addContainerMetadataField(doc, highlightedMetadataFields, "dc.title", title); + List toIgnoreMetadataFields = SearchUtils.getIgnoredMetadataFields(community.getType()); + addContainerMetadataField(doc, highlightedMetadataFields, toIgnoreMetadataFields, "dc.description", description); + addContainerMetadataField(doc, highlightedMetadataFields, toIgnoreMetadataFields, "dc.description.abstract", description_abstract); + addContainerMetadataField(doc, highlightedMetadataFields, toIgnoreMetadataFields, "dc.description.tableofcontents", description_table); + addContainerMetadataField(doc, highlightedMetadataFields, toIgnoreMetadataFields, "dc.rights", rights); + addContainerMetadataField(doc, highlightedMetadataFields, toIgnoreMetadataFields, "dc.title", title); //Do any additional indexing, depends on the plugins List solrServiceIndexPlugins = new DSpace().getServiceManager().getServicesByType(SolrServiceIndexPlugin.class); @@ -688,13 +689,14 @@ public class SolrServiceImpl implements SearchService, IndexingService { String rights_license = collection.getMetadata("license"); String title = collection.getMetadata("name"); - addContainerMetadataField(doc, highlightedMetadataFields, "dc.description", description); - addContainerMetadataField(doc, highlightedMetadataFields, "dc.description.abstract", description_abstract); - addContainerMetadataField(doc, highlightedMetadataFields, "dc.description.tableofcontents", description_table); - addContainerMetadataField(doc, highlightedMetadataFields, "dc.provenance", provenance); - addContainerMetadataField(doc, highlightedMetadataFields, "dc.rights", rights); - addContainerMetadataField(doc, highlightedMetadataFields, "dc.rights.license", rights_license); - addContainerMetadataField(doc, highlightedMetadataFields, "dc.title", title); + List toIgnoreMetadataFields = SearchUtils.getIgnoredMetadataFields(collection.getType()); + addContainerMetadataField(doc, highlightedMetadataFields, toIgnoreMetadataFields, "dc.description", description); + addContainerMetadataField(doc, highlightedMetadataFields, toIgnoreMetadataFields, "dc.description.abstract", description_abstract); + addContainerMetadataField(doc, highlightedMetadataFields, toIgnoreMetadataFields, "dc.description.tableofcontents", description_table); + addContainerMetadataField(doc, highlightedMetadataFields, toIgnoreMetadataFields, "dc.provenance", provenance); + addContainerMetadataField(doc, highlightedMetadataFields, toIgnoreMetadataFields, "dc.rights", rights); + addContainerMetadataField(doc, highlightedMetadataFields, toIgnoreMetadataFields, "dc.rights.license", rights_license); + addContainerMetadataField(doc, highlightedMetadataFields, toIgnoreMetadataFields, "dc.title", title); //Do any additional indexing, depends on the plugins @@ -715,14 +717,17 @@ public class SolrServiceImpl implements SearchService, IndexingService { * @param metadataField the metadata field added * @param value the value (can be NULL !) */ - protected void addContainerMetadataField(SolrInputDocument doc, List highlightedMetadataFields, String metadataField, String value) + protected void addContainerMetadataField(SolrInputDocument doc, List highlightedMetadataFields, List toIgnoreMetadataFields, String metadataField, String value) { - if(StringUtils.isNotBlank(value)) + if(toIgnoreMetadataFields == null || !toIgnoreMetadataFields.contains(metadataField)) { - doc.addField(metadataField, value); - if(highlightedMetadataFields.contains(metadataField)) + if(StringUtils.isNotBlank(value)) { - doc.addField(metadataField + "_hl", value); + doc.addField(metadataField, value); + if(highlightedMetadataFields.contains(metadataField)) + { + doc.addField(metadataField + "_hl", value); + } } } } @@ -822,21 +827,7 @@ public class SolrServiceImpl implements SearchService, IndexingService { } } - List toIgnoreFields = new ArrayList(); - String ignoreFieldsString = new DSpace().getConfigurationService().getProperty("discovery.index.ignore"); - if(ignoreFieldsString != null) - { - if(ignoreFieldsString.contains(",")) - { - for (int i = 0; i < ignoreFieldsString.split(",").length; i++) - { - toIgnoreFields.add(ignoreFieldsString.split(",")[i].trim()); - } - } else { - toIgnoreFields.add(ignoreFieldsString); - } - } - + List toProjectionFields = new ArrayList(); String projectionFieldsString = new DSpace().getConfigurationService().getProperty("discovery.index.projection"); if(projectionFieldsString != null){ @@ -867,8 +858,9 @@ public class SolrServiceImpl implements SearchService, IndexingService { field += "." + meta.qualifier; } + List toIgnoreMetadataFields = SearchUtils.getIgnoredMetadataFields(item.getType()); //We are not indexing provenance, this is useless - if (toIgnoreFields.contains(field) || toIgnoreFields.contains(unqualifiedField + "." + Item.ANY)) + if (toIgnoreMetadataFields != null && (toIgnoreMetadataFields.contains(field) || toIgnoreMetadataFields.contains(unqualifiedField + "." + Item.ANY))) { continue; } diff --git a/dspace-api/src/main/java/org/dspace/discovery/configuration/DiscoveryConfigurationService.java b/dspace-api/src/main/java/org/dspace/discovery/configuration/DiscoveryConfigurationService.java index a6b1165207..14335afcf1 100644 --- a/dspace-api/src/main/java/org/dspace/discovery/configuration/DiscoveryConfigurationService.java +++ b/dspace-api/src/main/java/org/dspace/discovery/configuration/DiscoveryConfigurationService.java @@ -18,6 +18,7 @@ import java.util.Map; public class DiscoveryConfigurationService { private Map map; + private Map> toIgnoreMetadataFields; public Map getMap() { return map; @@ -27,6 +28,14 @@ public class DiscoveryConfigurationService { this.map = map; } + public Map> getToIgnoreMetadataFields() { + return toIgnoreMetadataFields; + } + + public void setToIgnoreMetadataFields(Map> toIgnoreMetadataFields) { + this.toIgnoreMetadataFields = toIgnoreMetadataFields; + } + public static void main(String[] args) { DSpace dspace = new DSpace(); System.out.println(dspace.getServiceManager().getServicesNames().size()); diff --git a/dspace/config/modules/discovery.cfg b/dspace/config/modules/discovery.cfg index 1f5c3e1207..1512396faa 100644 --- a/dspace/config/modules/discovery.cfg +++ b/dspace/config/modules/discovery.cfg @@ -10,9 +10,6 @@ search.server = http://localhost:8080/solr/search #Char used to ensure that the sidebar facets are case insensitive #solr.facets.split.char=\n|||\n -#All metadata fields that will not end up in the index, this is a comma separated list -index.ignore=dc.description.provenance - # index.ignore-variants = false # index.ignore-authority = false index.projection=dc.title,dc.contributor.*,dc.date.issued diff --git a/dspace/config/spring/api/discovery.xml b/dspace/config/spring/api/discovery.xml index 0ae4be506d..eeafd9152c 100644 --- a/dspace/config/spring/api/discovery.xml +++ b/dspace/config/spring/api/discovery.xml @@ -9,12 +9,15 @@ --> @@ -44,6 +47,46 @@ + + + + + + + + + + + + + dc.rights + + + + + + + + + + + + + + + dc.rights + + + + + + + + dc.description.provenance + + + +