Skip to content

Commit adeb262

Browse files
authored
Switch to using SearchFieldKey.getSolrName instead of using properties file lookups. Switch to using constants for a few other things that came from solr.properties (#1344)
1 parent 9a8a874 commit adeb262

File tree

20 files changed

+96
-435
lines changed

20 files changed

+96
-435
lines changed

indexing-solr/src/main/java/edu/unc/lib/boxc/indexing/solr/action/DeleteSolrTreeAction.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,12 @@ public void performAction(SolrUpdateRequest updateRequest) throws IndexingExcept
5656

5757
// Delete the container itself
5858
solrUpdateDriver.deleteByQuery(
59-
solrSettings.getFieldName(SearchFieldKey.ID.name()) + ":"
59+
SearchFieldKey.ID.getSolrField() + ":"
6060
+ SolrSettings.sanitize(updateRequest.getTargetID()));
6161

6262
// Delete the containers contents
6363
solrUpdateDriver.deleteByQuery(
64-
solrSettings.getFieldName(SearchFieldKey.ANCESTOR_PATH.name())
64+
SearchFieldKey.ANCESTOR_PATH.getSolrField()
6565
+ ":" + SolrSettings.sanitize(ancestorPathBean.getPath().getSearchValue()));
6666
} else {
6767
// Targeting an individual file, just delete it.

indexing-solr/src/main/java/edu/unc/lib/boxc/indexing/solr/action/DeleteStaleChildren.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,12 @@ public void performAction(SolrUpdateRequest updateRequest) throws IndexingExcept
6464
ContentObjectRecord ancestorPathBean = getRootAncestorPath(updateRequest);
6565

6666
// Limit cleanup scope to root pid
67-
query.append(solrSettings.getFieldName(SearchFieldKey.ANCESTOR_PATH.name())).append(':')
67+
query.append(SearchFieldKey.ANCESTOR_PATH.getSolrField()).append(':')
6868
.append(SolrSettings.sanitize(ancestorPathBean.getPath().getSearchValue()));
6969
}
7070

7171
// Target any children with timestamp older than start time.
72-
query.append(" AND ").append(solrSettings.getFieldName(SearchFieldKey.TIMESTAMP.name()))
72+
query.append(" AND ").append(SearchFieldKey.TIMESTAMP.getSolrField())
7373
.append(":{* TO ").append(staleTimestamp).append("}");
7474

7575
solrUpdateDriver.deleteByQuery(query.toString());

indexing-solr/src/test/resources/solr.properties

+1-47
Original file line numberDiff line numberDiff line change
@@ -3,50 +3,4 @@ solr.socketTimeout=10000
33
solr.connectionTimeout=10000
44
solr.defaultMaxConnectionsPerHost=100
55
solr.maxConnections=100
6-
solr.maxRetries=3
7-
solr.requiredFields=adminGroup,id,readGroup,resourceType,roleGroup,rollup,title
8-
#Solr field names
9-
solr.field.SCORE=score
10-
solr.field.ID=id
11-
solr.field.ANCESTOR_PATH=ancestorPath
12-
solr.field.ANCESTOR_NAMES=ancestorNames
13-
solr.field.ROLE_GROUP=roleGroup
14-
solr.field.READ_GROUP=readGroup
15-
solr.field.ADMIN_GROUP=adminGroup
16-
solr.field.STATUS=status
17-
solr.field.RESOURCE_TYPE=resourceType
18-
solr.field.RESOURCE_TYPE_SORT=resourceTypeSort
19-
solr.field.DISPLAY_ORDER=displayOrder
20-
solr.field.CONTENT_TYPE=contentType
21-
solr.field.DATASTREAM=datastream
22-
solr.field.PARENT_COLLECTION=parentCollection
23-
solr.field.TITLE=title
24-
solr.field.TITLE_LC=title_lc
25-
solr.field.ABSTRACT=abstract
26-
solr.field.COLLECTION_ID=collectionId
27-
solr.field.LABEL=label
28-
solr.field.KEYWORD=keyword
29-
solr.field.SUBJECT=subject
30-
solr.field.LANGUAGE=language
31-
solr.field.CREATOR=creator
32-
solr.field.CREATOR_SORT=creatorSort
33-
solr.field.CONTRIBUTOR=contributor
34-
solr.field.DEPARTMENT=department
35-
solr.field.CITATION=citation
36-
solr.field.DATE_CREATED=dateCreated
37-
solr.field.DATE_ADDED=dateAdded
38-
solr.field.DATE_UPDATED=dateUpdated
39-
solr.field.FULL_TEXT=fullText
40-
solr.field.ROLLUP_ID=rollup
41-
solr.field.SCOPE=scope
42-
solr.field.RELATIONS=relations
43-
solr.field.CONTENT_MODEL=contentModel
44-
solr.field.TIMESTAMP=timestamp
45-
solr.field.LAST_INDEXED=lastIndexed
46-
solr.field.FILESIZE=filesizeSort
47-
solr.field.FILESIZE_TOTAL=filesizeTotal
48-
solr.field.DEFAULT_INDEX=text
49-
solr.field.TITLE_INDEX=titleIndex
50-
solr.field.CONTRIBUTOR_INDEX=contributorIndex
51-
solr.field.SUBJECT_INDEX=subjectIndex
52-
solr.field.VERSION=_version_
6+
solr.maxRetries=3

integration/src/test/resources/solr.properties

-51
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,9 @@
1-
solr.reservedCharacters=+-!(){}[]^"~*?:\\
21
solr.core=access
32
solr.socketTimeout=40000
43
solr.connectionTimeout=20000
54
solr.defaultMaxConnectionsPerHost=100
65
solr.maxConnections=100
76
solr.maxRetries=1
8-
solr.requiredFields=adminGroup,id,readGroup,resourceType,roleGroup,rollup,title
9-
#Solr field names
10-
solr.field.SCORE=score
11-
solr.field.ID=id
12-
solr.field.ANCESTOR_PATH=ancestorPath
13-
solr.field.ANCESTOR_IDS=ancestorIds
14-
solr.field.ROLE_GROUP=roleGroup
15-
solr.field.READ_GROUP=readGroup
16-
solr.field.ADMIN_GROUP=adminGroup
17-
solr.field.STATUS=status
18-
solr.field.CONTENT_STATUS=contentStatus
19-
solr.field.RESOURCE_TYPE=resourceType
20-
solr.field.RESOURCE_TYPE_SORT=resourceTypeSort
21-
solr.field.DISPLAY_ORDER=displayOrder
22-
solr.field.CONTENT_TYPE=contentType
23-
solr.field.DATASTREAM=datastream
24-
solr.field.PARENT_COLLECTION=parentCollection
25-
solr.field.TITLE=title
26-
solr.field.TITLE_LC=title_lc
27-
solr.field.LABEL=label
28-
solr.field.ABSTRACT=abstract
29-
solr.field.COLLECTION_ID=collectionId
30-
solr.field.KEYWORD=keyword
31-
solr.field.SUBJECT=subject
32-
solr.field.LANGUAGE=language
33-
solr.field.CREATOR=creator
34-
solr.field.CREATOR_SORT=creatorSort
35-
solr.field.NAME=name
36-
solr.field.CONTRIBUTOR=contributor
37-
solr.field.DEPARTMENT=department
38-
solr.field.DEPARTMENT_LC=department_lc
39-
solr.field.IDENTIFIER=identifier
40-
solr.field.IDENTIFIER_SORT=identifierSort
41-
solr.field.CITATION=citation
42-
solr.field.DATE_CREATED=dateCreated
43-
solr.field.DATE_ADDED=dateAdded
44-
solr.field.DATE_UPDATED=dateUpdated
45-
solr.field.FULL_TEXT=fullText
46-
solr.field.ROLLUP_ID=rollup
47-
solr.field.SCOPE=scope
48-
solr.field.RELATIONS=relations
49-
solr.field.CONTENT_MODEL=contentModel
50-
solr.field.TIMESTAMP=timestamp
51-
solr.field.LAST_INDEXED=lastIndexed
52-
solr.field.FILESIZE=filesizeSort
53-
solr.field.FILESIZE_TOTAL=filesizeTotal
54-
solr.field.DEFAULT_INDEX=text
55-
solr.field.TITLE_INDEX=titleIndex
56-
solr.field.CONTRIBUTOR_INDEX=contributorIndex
57-
solr.field.SUBJECT_INDEX=subjectIndex
587
#Dynamic fields
598
solr.field.RLA_SITE_CODE=rla_site_code_d
609
solr.field.RLA_CATALOG_NUMBER=rla_catalog_number_d

search-api/src/main/java/edu/unc/lib/boxc/search/api/SearchFieldKey.java

+18
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@
1515
*/
1616
package edu.unc.lib.boxc.search.api;
1717

18+
import java.util.Arrays;
19+
import java.util.Map;
20+
import java.util.function.Function;
21+
import java.util.stream.Collectors;
22+
1823
/**
1924
*
2025
* @author bbpennel
@@ -63,6 +68,8 @@ public enum SearchFieldKey {
6368
RESOURCE_TYPE_SORT("resourceTypeSort"),
6469
ROLE_GROUP("roleGroup"),
6570
ROLLUP_ID("rollup"),
71+
SCOPE("scope"),
72+
SCORE("score"),
6673
STATUS("status"),
6774
SUBJECT("subject"),
6875
SUBJECT_INDEX("subjectIndex"),
@@ -74,6 +81,9 @@ public enum SearchFieldKey {
7481

7582
private final String solrField;
7683

84+
private static Map<String, SearchFieldKey> nameToKey = Arrays.stream(SearchFieldKey.values())
85+
.collect(Collectors.toMap(SearchFieldKey::getSolrField, Function.identity()));
86+
7787
private SearchFieldKey(String solrField) {
7888
this.solrField = solrField;
7989
}
@@ -85,4 +95,12 @@ private SearchFieldKey(String solrField) {
8595
public String getSolrField() {
8696
return solrField;
8797
}
98+
99+
/**
100+
* @param name
101+
* @return the SearchFieldKey which has a solr field name matching the provided value
102+
*/
103+
public static SearchFieldKey getByName(String name) {
104+
return nameToKey.get(name);
105+
}
88106
}

search-solr/src/main/java/edu/unc/lib/boxc/search/solr/config/SolrSettings.java

+15-38
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,20 @@
1515
*/
1616
package edu.unc.lib.boxc.search.solr.config;
1717

18+
import edu.unc.lib.boxc.search.api.SearchFieldKey;
19+
import org.apache.solr.client.solrj.SolrClient;
20+
import org.apache.solr.client.solrj.impl.HttpSolrClient;
21+
import org.slf4j.Logger;
22+
import org.slf4j.LoggerFactory;
23+
1824
import java.util.ArrayList;
1925
import java.util.HashMap;
2026
import java.util.List;
27+
import java.util.Map;
2128
import java.util.Properties;
2229
import java.util.regex.Matcher;
2330
import java.util.regex.Pattern;
2431

25-
import org.apache.solr.client.solrj.SolrClient;
26-
import org.apache.solr.client.solrj.impl.HttpSolrClient;
27-
import org.slf4j.Logger;
28-
import org.slf4j.LoggerFactory;
29-
3032
/**
3133
* Utility class which stores Solr index addressing and instantiation settings from a properties file.
3234
*
@@ -43,10 +45,13 @@ public class SolrSettings extends AbstractSettings {
4345
private int maxConnections;
4446
private int maxRetries;
4547
// Mapping of field keys to internal solr field names
46-
private HashMap<String, String> fieldNames;
48+
private Map<String, String> fieldNames;
4749
// Reverse of fieldName, for translating from the internal solr field name to the general field identification key
48-
private HashMap<String, String> fieldNameToKey;
49-
private String[] requiredFields;
50+
private Map<String, String> fieldNameToKey;
51+
private String[] requiredFields = new String[] {
52+
SearchFieldKey.ADMIN_GROUP.getSolrField(), SearchFieldKey.ID.getSolrField(),
53+
SearchFieldKey.RESOURCE_TYPE.getSolrField(), SearchFieldKey.ROLE_GROUP.getSolrField(),
54+
SearchFieldKey.ROLLUP_ID.getSolrField(), SearchFieldKey.TITLE.getSolrField() };
5055

5156
public SolrSettings() {
5257
fieldNames = new HashMap<>();
@@ -62,7 +67,6 @@ public void setProperties(Properties properties) {
6267
LOG.debug("Setting properties.");
6368
this.setPath(properties.getProperty("solr.path", ""));
6469
this.setCore(properties.getProperty("solr.core", ""));
65-
this.setRequiredFields(properties.getProperty("solr.requiredFields", ""));
6670
this.setSocketTimeout(Integer.parseInt(properties.getProperty("solr.socketTimeout", "1000")));
6771
this.setConnectionTimeout(Integer.parseInt(properties.getProperty("solr.connectionTimeout", "100")));
6872
this.setDefaultMaxConnectionsPerHost(Integer.parseInt(properties.getProperty(
@@ -175,10 +179,6 @@ public String[] getRequiredFields() {
175179
return requiredFields;
176180
}
177181

178-
public void setRequiredFields(String requiredFields) {
179-
this.requiredFields = requiredFields.split(",");
180-
}
181-
182182
public int getSocketTimeout() {
183183
return socketTimeout;
184184
}
@@ -232,38 +232,15 @@ public String toStringStatic() {
232232
}
233233

234234
/**
235-
* Returns the field identification key for the internal solr field name given
235+
* Returns the dynamic field identification key for the internal solr field name given
236236
*
237237
* @param name
238238
* @return
239239
*/
240-
public String getFieldKey(String name) {
240+
public String getDynamicFieldKey(String name) {
241241
return fieldNameToKey.get(name);
242242
}
243243

244-
public HashMap<String, String> getFieldNameToKey() {
245-
return this.fieldNameToKey;
246-
}
247-
248-
/**
249-
* Returns the internal solr field name for the field identified by key
250-
*
251-
* @param key
252-
* @return
253-
*/
254-
public String getFieldName(String key) {
255-
return fieldNames.get(key);
256-
}
257-
258-
public HashMap<String, String> getFieldNames() {
259-
return fieldNames;
260-
}
261-
262-
public void setFieldNames(HashMap<String, String> fieldNames) {
263-
this.fieldNames = fieldNames;
264-
fieldNameToKey = getInvertedHashMap(fieldNames);
265-
}
266-
267244
public int getMaxRetries() {
268245
return maxRetries;
269246
}

search-solr/src/main/java/edu/unc/lib/boxc/search/solr/services/AbstractQueryService.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ protected void addSort(SolrQuery solrQuery, String sortType, boolean normalOrder
153153
if (!normalOrder) {
154154
sortOrder = sortOrder.reverse();
155155
}
156-
solrQuery.addSort(solrSettings.getFieldName(sortField.getFieldName()), sortOrder);
156+
solrQuery.addSort(SearchFieldKey.valueOf(sortField.getFieldName()).getSolrField(), sortOrder);
157157
}
158158
}
159159
}
@@ -169,9 +169,9 @@ protected void addResultFields(List<String> resultFields, SolrQuery solrQuery) {
169169
resultFields = DEFAULT_RESULT_FIELDS;
170170
}
171171
for (String field : resultFields) {
172-
String solrFieldName = solrSettings.getFieldName(field);
173-
if (solrFieldName != null) {
174-
solrQuery.addField(solrFieldName);
172+
var solrField = SearchFieldKey.valueOf(field);
173+
if (solrField != null) {
174+
solrQuery.addField(solrField.getSolrField());
175175
}
176176
}
177177
}
@@ -183,7 +183,7 @@ protected void addResultFields(List<String> resultFields, SolrQuery solrQuery) {
183183
* @return
184184
*/
185185
public String solrField(SearchFieldKey fieldKey) {
186-
return solrSettings.getFieldName(fieldKey.name());
186+
return fieldKey.getSolrField();
187187
}
188188

189189
/**

search-solr/src/main/java/edu/unc/lib/boxc/search/solr/services/FacetFieldFactory.java

+2-4
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
import java.util.ArrayList;
2121
import java.util.Collection;
2222
import java.util.List;
23-
import java.util.Map;
2423

24+
import edu.unc.lib.boxc.search.api.SearchFieldKey;
2525
import org.apache.solr.client.solrj.response.FacetField;
2626
import org.slf4j.Logger;
2727
import org.slf4j.LoggerFactory;
@@ -89,11 +89,9 @@ public FacetFieldList createFacetFieldList(List<FacetField> facetFields) {
8989
if (facetFields == null) {
9090
return null;
9191
}
92-
Map<String, String> fieldNameMappings = solrSettings.getFieldNameToKey();
93-
9492
FacetFieldList facetFieldList = new FacetFieldList();
9593
for (FacetField facetField : facetFields) {
96-
String fieldName = fieldNameMappings.get(facetField.getName());
94+
String fieldName = SearchFieldKey.getByName(facetField.getName()).name();
9795
if (facetField.getValueCount() > 0) {
9896
facetFieldList.add(createFacetFieldObject(fieldName, facetField));
9997
}

search-solr/src/main/java/edu/unc/lib/boxc/search/solr/services/GetCollectionIdService.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ private String findFirstCollectionId(ContentObjectRecord mdObj) {
7272
List<String> ancestors = mdObj.getAncestorPath();
7373
int index = ancestors.size();
7474

75-
String idFieldName = solrSettings.getFieldName(SearchFieldKey.ID.name());
76-
String collectionIdName = solrSettings.getFieldName(SearchFieldKey.COLLECTION_ID.name());
75+
String idFieldName = SearchFieldKey.ID.getSolrField();
76+
String collectionIdName = SearchFieldKey.COLLECTION_ID.getSolrField();
7777

7878
while (--index >= ContentPathConstants.COLLECTION_DEPTH) {
7979
String nextId = StringUtils.substringAfter(ancestors.get(index), ",");

search-solr/src/main/java/edu/unc/lib/boxc/search/solr/services/ObjectPathFactory.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,9 @@ public void init() {
7272
mapBuilder.maximumWeightedCapacity(cacheSize);
7373
this.pathCache = mapBuilder.build();
7474

75-
titleFieldName = solrSettings.getFieldName(SearchFieldKey.TITLE.name());
76-
typeFieldName = solrSettings.getFieldName(SearchFieldKey.RESOURCE_TYPE.name());
77-
collectionId = solrSettings.getFieldName(SearchFieldKey.COLLECTION_ID.name());
75+
titleFieldName = SearchFieldKey.TITLE.getSolrField();
76+
typeFieldName = SearchFieldKey.RESOURCE_TYPE.getSolrField();
77+
collectionId = SearchFieldKey.COLLECTION_ID.getSolrField();
7878
pathFields = Arrays.asList(titleFieldName, typeFieldName);
7979
startObjectFields = Arrays.asList(SearchFieldKey.ID.name(),
8080
SearchFieldKey.TITLE.name(), SearchFieldKey.RESOURCE_TYPE.name(),

0 commit comments

Comments
 (0)