Merge pull request #118 from atmire/DS-1246

[DS-1246] Discovery indexer indexes collection license field.
This commit is contained in:
Mark Diggory
2012-10-31 14:53:34 -07:00
5 changed files with 88 additions and 42 deletions

View File

@@ -67,6 +67,11 @@ public class SearchUtils {
return manager.getServiceByName(DiscoveryConfigurationService.class.getName(), DiscoveryConfigurationService.class); return manager.getServiceByName(DiscoveryConfigurationService.class.getName(), DiscoveryConfigurationService.class);
} }
public static List<String> getIgnoredMetadataFields(int type)
{
return getConfigurationService().getToIgnoreMetadataFields().get(type);
}
/** /**
* Method that retrieves a list of all the configuration objects from the given item * 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 * A configuration object can be returned for each parent community/collection

View File

@@ -82,7 +82,7 @@ public class SolrServiceImpl implements SearchService, IndexingService {
public static final String STORE_SEPARATOR = "\n|||\n"; public static final String STORE_SEPARATOR = "\n|||\n";
public static final String VARIANTS_STORE_SEPARATOR = "###"; public static final String VARIANTS_STORE_SEPARATOR = "###";
/** /**
* Non-Static CommonsHttpSolrServer for processing indexing events. * Non-Static CommonsHttpSolrServer for processing indexing events.
*/ */
@@ -636,11 +636,12 @@ public class SolrServiceImpl implements SearchService, IndexingService {
String rights = community.getMetadata("copyright_text"); String rights = community.getMetadata("copyright_text");
String title = community.getMetadata("name"); String title = community.getMetadata("name");
addContainerMetadataField(doc, highlightedMetadataFields, "dc.description", description); List<String> toIgnoreMetadataFields = SearchUtils.getIgnoredMetadataFields(community.getType());
addContainerMetadataField(doc, highlightedMetadataFields, "dc.description.abstract", description_abstract); addContainerMetadataField(doc, highlightedMetadataFields, toIgnoreMetadataFields, "dc.description", description);
addContainerMetadataField(doc, highlightedMetadataFields, "dc.description.tableofcontents", description_table); addContainerMetadataField(doc, highlightedMetadataFields, toIgnoreMetadataFields, "dc.description.abstract", description_abstract);
addContainerMetadataField(doc, highlightedMetadataFields, "dc.rights", rights); addContainerMetadataField(doc, highlightedMetadataFields, toIgnoreMetadataFields, "dc.description.tableofcontents", description_table);
addContainerMetadataField(doc, highlightedMetadataFields, "dc.title", title); addContainerMetadataField(doc, highlightedMetadataFields, toIgnoreMetadataFields, "dc.rights", rights);
addContainerMetadataField(doc, highlightedMetadataFields, toIgnoreMetadataFields, "dc.title", title);
//Do any additional indexing, depends on the plugins //Do any additional indexing, depends on the plugins
List<SolrServiceIndexPlugin> solrServiceIndexPlugins = new DSpace().getServiceManager().getServicesByType(SolrServiceIndexPlugin.class); List<SolrServiceIndexPlugin> solrServiceIndexPlugins = new DSpace().getServiceManager().getServicesByType(SolrServiceIndexPlugin.class);
@@ -688,13 +689,14 @@ public class SolrServiceImpl implements SearchService, IndexingService {
String rights_license = collection.getMetadata("license"); String rights_license = collection.getMetadata("license");
String title = collection.getMetadata("name"); String title = collection.getMetadata("name");
addContainerMetadataField(doc, highlightedMetadataFields, "dc.description", description); List<String> toIgnoreMetadataFields = SearchUtils.getIgnoredMetadataFields(collection.getType());
addContainerMetadataField(doc, highlightedMetadataFields, "dc.description.abstract", description_abstract); addContainerMetadataField(doc, highlightedMetadataFields, toIgnoreMetadataFields, "dc.description", description);
addContainerMetadataField(doc, highlightedMetadataFields, "dc.description.tableofcontents", description_table); addContainerMetadataField(doc, highlightedMetadataFields, toIgnoreMetadataFields, "dc.description.abstract", description_abstract);
addContainerMetadataField(doc, highlightedMetadataFields, "dc.provenance", provenance); addContainerMetadataField(doc, highlightedMetadataFields, toIgnoreMetadataFields, "dc.description.tableofcontents", description_table);
addContainerMetadataField(doc, highlightedMetadataFields, "dc.rights", rights); addContainerMetadataField(doc, highlightedMetadataFields, toIgnoreMetadataFields, "dc.provenance", provenance);
addContainerMetadataField(doc, highlightedMetadataFields, "dc.rights.license", rights_license); addContainerMetadataField(doc, highlightedMetadataFields, toIgnoreMetadataFields, "dc.rights", rights);
addContainerMetadataField(doc, highlightedMetadataFields, "dc.title", title); addContainerMetadataField(doc, highlightedMetadataFields, toIgnoreMetadataFields, "dc.rights.license", rights_license);
addContainerMetadataField(doc, highlightedMetadataFields, toIgnoreMetadataFields, "dc.title", title);
//Do any additional indexing, depends on the plugins //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 metadataField the metadata field added
* @param value the value (can be NULL !) * @param value the value (can be NULL !)
*/ */
protected void addContainerMetadataField(SolrInputDocument doc, List<String> highlightedMetadataFields, String metadataField, String value) protected void addContainerMetadataField(SolrInputDocument doc, List<String> highlightedMetadataFields, List<String> toIgnoreMetadataFields, String metadataField, String value)
{ {
if(StringUtils.isNotBlank(value)) if(toIgnoreMetadataFields == null || !toIgnoreMetadataFields.contains(metadataField))
{ {
doc.addField(metadataField, value); if(StringUtils.isNotBlank(value))
if(highlightedMetadataFields.contains(metadataField))
{ {
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<String> toIgnoreFields = new ArrayList<String>();
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<String> toProjectionFields = new ArrayList<String>(); List<String> toProjectionFields = new ArrayList<String>();
String projectionFieldsString = new DSpace().getConfigurationService().getProperty("discovery.index.projection"); String projectionFieldsString = new DSpace().getConfigurationService().getProperty("discovery.index.projection");
if(projectionFieldsString != null){ if(projectionFieldsString != null){
@@ -867,8 +858,9 @@ public class SolrServiceImpl implements SearchService, IndexingService {
field += "." + meta.qualifier; field += "." + meta.qualifier;
} }
List<String> toIgnoreMetadataFields = SearchUtils.getIgnoredMetadataFields(item.getType());
//We are not indexing provenance, this is useless //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; continue;
} }

View File

@@ -18,6 +18,7 @@ import java.util.Map;
public class DiscoveryConfigurationService { public class DiscoveryConfigurationService {
private Map<String, DiscoveryConfiguration> map; private Map<String, DiscoveryConfiguration> map;
private Map<Integer, List<String>> toIgnoreMetadataFields;
public Map<String, DiscoveryConfiguration> getMap() { public Map<String, DiscoveryConfiguration> getMap() {
return map; return map;
@@ -27,6 +28,14 @@ public class DiscoveryConfigurationService {
this.map = map; this.map = map;
} }
public Map<Integer, List<String>> getToIgnoreMetadataFields() {
return toIgnoreMetadataFields;
}
public void setToIgnoreMetadataFields(Map<Integer, List<String>> toIgnoreMetadataFields) {
this.toIgnoreMetadataFields = toIgnoreMetadataFields;
}
public static void main(String[] args) { public static void main(String[] args) {
DSpace dspace = new DSpace(); DSpace dspace = new DSpace();
System.out.println(dspace.getServiceManager().getServicesNames().size()); System.out.println(dspace.getServiceManager().getServicesNames().size());

View File

@@ -10,9 +10,6 @@ search.server = http://localhost:8080/solr/search
#Char used to ensure that the sidebar facets are case insensitive #Char used to ensure that the sidebar facets are case insensitive
#solr.facets.split.char=\n|||\n #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-variants = false
# index.ignore-authority = false # index.ignore-authority = false
index.projection=dc.title,dc.contributor.*,dc.date.issued index.projection=dc.title,dc.contributor.*,dc.date.issued

View File

@@ -9,12 +9,15 @@
--> -->
<beans xmlns="http://www.springframework.org/schema/beans" <beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans xmlns:util="http://www.springframework.org/schema/util"
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd" http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd"
default-autowire-candidates="*Service,*DAO,javax.sql.DataSource"> default-autowire-candidates="*Service,*DAO,javax.sql.DataSource">
<context:annotation-config /> <!-- allows us to use spring annotations in beans --> <context:annotation-config /> <!-- allows us to use spring annotations in beans -->
@@ -44,6 +47,46 @@
<!--<entry key="123456789/7621" value-ref="defaultConfiguration"/>--> <!--<entry key="123456789/7621" value-ref="defaultConfiguration"/>-->
</map> </map>
</property> </property>
<property name="toIgnoreMetadataFields">
<map>
<entry>
<key><util:constant static-field="org.dspace.core.Constants.COMMUNITY"/></key>
<list>
<!--Introduction text-->
<!--<value>dc.description</value>-->
<!--Short description-->
<!--<value>dc.description.abstract</value>-->
<!--News-->
<!--<value>dc.description.tableofcontents</value>-->
<!--Copyright text-->
<value>dc.rights</value>
<!--Community name-->
<!--<value>dc.title</value>-->
</list>
</entry>
<entry>
<key><util:constant static-field="org.dspace.core.Constants.COLLECTION"/></key>
<list>
<!--Introduction text-->
<!--<value>dc.description</value>-->
<!--Short description-->
<!--<value>dc.description.abstract</value>-->
<!--News-->
<!--<value>dc.description.tableofcontents</value>-->
<!--Copyright text-->
<value>dc.rights</value>
<!--Collection name-->
<!--<value>dc.title</value>-->
</list>
</entry>
<entry>
<key><util:constant static-field="org.dspace.core.Constants.ITEM"/></key>
<list>
<value>dc.description.provenance</value>
</list>
</entry>
</map>
</property>
</bean> </bean>
<!--The default configuration settings for discovery--> <!--The default configuration settings for discovery-->