Merge pull request #2527 from atmire/w2p-64809_Updating-indexing-method

Discovery indexing: Ensuring discovery configuration is used during indexing
This commit is contained in:
benbosman
2019-10-15 18:05:03 +02:00
committed by GitHub
4 changed files with 50 additions and 11 deletions

View File

@@ -10,9 +10,9 @@ package org.dspace.discovery;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Set;
import org.dspace.content.Collection; import org.dspace.content.Collection;
import org.dspace.content.DSpaceObject; import org.dspace.content.DSpaceObject;
@@ -140,26 +140,26 @@ public class SearchUtils {
private static List<DiscoveryConfiguration> getAllDiscoveryConfigurations(String prefix, private static List<DiscoveryConfiguration> getAllDiscoveryConfigurations(String prefix,
List<Collection> collections, Item item) List<Collection> collections, Item item)
throws SQLException { throws SQLException {
Map<String, DiscoveryConfiguration> result = new HashMap<String, DiscoveryConfiguration>(); Set<DiscoveryConfiguration> result = new HashSet<>();
for (Collection collection : collections) { for (Collection collection : collections) {
DiscoveryConfiguration configuration = getDiscoveryConfiguration(prefix, collection); DiscoveryConfiguration configuration = getDiscoveryConfiguration(prefix, collection);
if (!result.containsKey(configuration.getId())) { result.add(configuration);
result.put(configuration.getId(), configuration);
}
} }
//Add alwaysIndex configurations
DiscoveryConfigurationService configurationService = getConfigurationService();
result.addAll(configurationService.getIndexAlwaysConfigurations());
//Also add one for the default //Also add one for the default
addConfigurationIfExists(result, prefix); addConfigurationIfExists(result, prefix);
return Arrays.asList(result.values().toArray(new DiscoveryConfiguration[result.size()])); return Arrays.asList(result.toArray(new DiscoveryConfiguration[result.size()]));
} }
private static void addConfigurationIfExists(Map<String, DiscoveryConfiguration> result, String confName) { private static void addConfigurationIfExists(Set<DiscoveryConfiguration> result, String confName) {
DiscoveryConfiguration configurationExtra = getDiscoveryConfigurationByName(confName); DiscoveryConfiguration configurationExtra = getDiscoveryConfigurationByName(confName);
if (!result.containsKey(configurationExtra.getId())) { result.add(configurationExtra);
result.put(configurationExtra.getId(), configurationExtra);
}
} }
} }

View File

@@ -51,6 +51,22 @@ public class DiscoveryConfiguration implements InitializingBean {
private DiscoveryHitHighlightingConfiguration hitHighlightingConfiguration; private DiscoveryHitHighlightingConfiguration hitHighlightingConfiguration;
private DiscoveryMoreLikeThisConfiguration moreLikeThisConfiguration; private DiscoveryMoreLikeThisConfiguration moreLikeThisConfiguration;
private boolean spellCheckEnabled; private boolean spellCheckEnabled;
private boolean indexAlways = false;
/**
* The `indexAlways` property determines whether the configuration should always be included when indexing items.
* The default value is false which implies the configuration is only used when it matches the collection or if
* it's the default configuration
* When set to true, the configuration is also used to index an item without a specific collection mapping
* This can be used for displaying different facets depending on the type of item instead of the collection
*/
public boolean isIndexAlways() {
return indexAlways;
}
public void setIndexAlways(boolean indexAlways) {
this.indexAlways = indexAlways;
}
public String getId() { public String getId() {
return id; return id;

View File

@@ -7,6 +7,7 @@
*/ */
package org.dspace.discovery.configuration; package org.dspace.discovery.configuration;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -75,6 +76,22 @@ public class DiscoveryConfigurationService {
} }
} }
/**
* Retrieves a list of all DiscoveryConfiguration objects where
* {@link org.dspace.discovery.configuration.DiscoveryConfiguration#isIndexAlways()} is true
* These configurations should always be included when indexing
*/
public List<DiscoveryConfiguration> getIndexAlwaysConfigurations() {
List<DiscoveryConfiguration> configs = new ArrayList<>();
for (String key : map.keySet()) {
DiscoveryConfiguration config = map.get(key);
if (config.isIndexAlways()) {
configs.add(config);
}
}
return configs;
}
public static void main(String[] args) { public static void main(String[] args) {
System.out.println(DSpaceServicesFactory.getInstance().getServiceManager().getServicesNames().size()); System.out.println(DSpaceServicesFactory.getInstance().getServiceManager().getServicesNames().size());
DiscoveryConfigurationService mainService = DSpaceServicesFactory.getInstance().getServiceManager() DiscoveryConfigurationService mainService = DSpaceServicesFactory.getInstance().getServiceManager()

View File

@@ -516,6 +516,7 @@
<bean id="publication" class="org.dspace.discovery.configuration.DiscoveryConfiguration" scope="prototype"> <bean id="publication" class="org.dspace.discovery.configuration.DiscoveryConfiguration" scope="prototype">
<property name="id" value="publication"/> <property name="id" value="publication"/>
<property name="indexAlways" value="true"/>
<!--Which sidebar facets are to be displayed--> <!--Which sidebar facets are to be displayed-->
<property name="sidebarFacets"> <property name="sidebarFacets">
<list> <list>
@@ -586,6 +587,7 @@
<bean id="person" class="org.dspace.discovery.configuration.DiscoveryConfiguration" scope="prototype"> <bean id="person" class="org.dspace.discovery.configuration.DiscoveryConfiguration" scope="prototype">
<property name="id" value="person"/> <property name="id" value="person"/>
<property name="indexAlways" value="true"/>
<!--Which sidebar facets are to be displayed--> <!--Which sidebar facets are to be displayed-->
<property name="sidebarFacets"> <property name="sidebarFacets">
<list> <list>
@@ -649,6 +651,7 @@
<bean id="organization" class="org.dspace.discovery.configuration.DiscoveryConfiguration" <bean id="organization" class="org.dspace.discovery.configuration.DiscoveryConfiguration"
scope="prototype"> scope="prototype">
<property name="id" value="organization"/> <property name="id" value="organization"/>
<property name="indexAlways" value="true"/>
<!--Which sidebar facets are to be displayed--> <!--Which sidebar facets are to be displayed-->
<property name="sidebarFacets"> <property name="sidebarFacets">
<list> <list>
@@ -713,6 +716,7 @@
<bean id="publicationIssue" class="org.dspace.discovery.configuration.DiscoveryConfiguration" <bean id="publicationIssue" class="org.dspace.discovery.configuration.DiscoveryConfiguration"
scope="prototype"> scope="prototype">
<property name="id" value="publicationIssue"/> <property name="id" value="publicationIssue"/>
<property name="indexAlways" value="true"/>
<!--Which sidebar facets are to be displayed--> <!--Which sidebar facets are to be displayed-->
<property name="sidebarFacets"> <property name="sidebarFacets">
<list> <list>
@@ -773,6 +777,7 @@
<bean id="publicationVolume" class="org.dspace.discovery.configuration.DiscoveryConfiguration" <bean id="publicationVolume" class="org.dspace.discovery.configuration.DiscoveryConfiguration"
scope="prototype"> scope="prototype">
<property name="id" value="publicationVolume"/> <property name="id" value="publicationVolume"/>
<property name="indexAlways" value="true"/>
<!--Which sidebar facets are to be displayed--> <!--Which sidebar facets are to be displayed-->
<property name="sidebarFacets"> <property name="sidebarFacets">
<list> <list>
@@ -832,6 +837,7 @@
<bean id="periodical" class="org.dspace.discovery.configuration.DiscoveryConfiguration" <bean id="periodical" class="org.dspace.discovery.configuration.DiscoveryConfiguration"
scope="prototype"> scope="prototype">
<property name="id" value="periodical"/> <property name="id" value="periodical"/>
<property name="indexAlways" value="true"/>
<!--Which sidebar facets are to be displayed--> <!--Which sidebar facets are to be displayed-->
<property name="sidebarFacets"> <property name="sidebarFacets">
<list> <list>