-
Notifications
You must be signed in to change notification settings - Fork 358
/
index-alphabetic-browse.sh
executable file
·136 lines (115 loc) · 4.71 KB
/
index-alphabetic-browse.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#!/bin/bash
#####################################################
# Build java command
#####################################################
if [ "$JAVA_HOME" ]
then
JAVA="$JAVA_HOME/bin/java"
else
JAVA="java"
fi
##################################################
# Set VUFIND_HOME
##################################################
if [ -z "$VUFIND_HOME" ]
then
# set VUFIND_HOME to the absolute path of the directory containing this script
# https://stackoverflow.com/questions/4774054/reliable-way-for-a-bash-script-to-get-the-full-path-to-itself
VUFIND_HOME="$(cd "$(dirname "$0")" && pwd -P)"
if [ -z "$VUFIND_HOME" ]
then
exit 1
fi
fi
if [ -z "$SOLR_HOME" ]
then
SOLR_HOME="$VUFIND_HOME/solr/vufind"
fi
# This can point to an external Solr in e.g. a Docker container
if [ -z "$SOLR_JAR_PATH" ]
then
SOLR_JAR_PATH="${SOLR_HOME}/../vendor"
fi
set -e
set -x
cd "$(dirname "$0")/import"
SOLRMARC_CLASSPATH=$(echo solrmarc_core*.jar)
if [[ $(wc -w <<<"$SOLRMARC_CLASSPATH") -gt 1 ]]
then
echo "Error: more than one solrmarc_core*.jar in import/; exiting."
exit 1
fi
CLASSPATH="browse-indexing.jar:${SOLRMARC_CLASSPATH}:${VUFIND_HOME}/import/lib/*:${SOLR_HOME}/jars/*:${SOLR_JAR_PATH}/modules/analysis-extras/lib/*:${SOLR_JAR_PATH}/server/solr-webapp/webapp/WEB-INF/lib/*"
# make index work with replicated index
# current index is stored in the last line of index.properties
function locate_index
{
local indexDir=$1
# default value
local subDir="index"
if [ -e "$indexDir/index.properties" ]
then
# read it into an array
readarray farr < "$indexDir/index.properties"
# get the last line
indexline="${farr[${#farr[@]}-1]}"
# parse the lastline to just get the filename
subDir=${indexline#index=}
fi
echo "$indexDir/$subDir"
}
bib_index=$(locate_index "${SOLR_HOME}/biblio")
auth_index=$(locate_index "${SOLR_HOME}/authority")
index_dir="${SOLR_HOME}/alphabetical_browse"
mkdir -p "$index_dir"
function build_browse
{
browse=$1
field=$2
skip_authority=$3
extra_jvm_opts=$4
# Get the browse headings from Solr
if [ "$skip_authority" = "1" ]; then
if ! output=$($JAVA ${extra_jvm_opts} -Dfile.encoding="UTF-8" -Dfield.preferred=heading -Dfield.insteadof=use_for -cp "$CLASSPATH" org.vufind.solr.indexing.PrintBrowseHeadings "$bib_index" "$field" "${browse}.tmp" 2>&1); then
echo "ERROR: Failed to create browse headings for ${browse}. ${output}."
exit 1
fi
else
if ! output=$($JAVA ${extra_jvm_opts} -Dfile.encoding="UTF-8" -Dfield.preferred=heading -Dfield.insteadof=use_for -cp "$CLASSPATH" org.vufind.solr.indexing.PrintBrowseHeadings "$bib_index" "$field" "$auth_index" "${browse}.tmp" 2>&1); then
echo "ERROR: Failed to create browse headings for ${browse}. ${output}."
exit 1
fi
fi
# Sort the browse headings
if ! output=$(sort -T /var/tmp -u -t$'\1' -k1 "${browse}.tmp" -o "sorted-${browse}.tmp" 2>&1); then
echo "ERROR: Failed to sort ${browse}. ${output}."
exit 1
fi
# Build the SQLite database
if ! output=$($JAVA -Dfile.encoding="UTF-8" -cp "$CLASSPATH" org.vufind.solr.indexing.CreateBrowseSQLite "sorted-${browse}.tmp" "${browse}_browse.db" 2>&1); then
echo "ERROR: Failed to build the SQLite database for ${browse}. ${output}."
exit 1
fi
# Clear up temp files
if ! output=$(rm -f -- *.tmp 2>&1); then
echo "ERROR: Failed to clear out temp files for ${browse}. ${output}."
exit 1
fi
# Move the new database to the index directory
if ! output=$(mv "${browse}_browse.db" "$index_dir/${browse}_browse.db-updated" 2>&1); then
echo "ERROR: Failed to move ${browse}_browse.db database to ${index_dir}/${browse}_browse.db-updated. ${output}."
exit 1
fi
# Indicate that the new database is ready for use
if ! output=$(touch "$index_dir/${browse}_browse.db-ready" 2>&1); then
echo "ERROR: Failed to mark the new ${browse} database as ready for use. ${output}."
exit 1
fi
}
# These parameters should match the ones in solr/vufind/biblio/conf/solrconfig.xml - BrowseRequestHandler
build_browse "hierarchy" "hierarchy_browse"
build_browse "title" "title_fullStr" 1 "-Dbib_field_iterator=org.vufind.solr.indexing.StoredFieldIterator -Dsortfield=title_sort -Dvaluefield=title_fullStr -Dbrowse.normalizer=org.vufind.util.TitleNormalizer"
build_browse "topic" "topic_browse" 0 "-Dbrowse.normalizer=org.vufind.util.TopicNormalizer"
build_browse "author" "author_browse"
build_browse "lcc" "callnumber-raw" 1 "-Dbrowse.normalizer=org.vufind.util.LCCallNormalizer"
build_browse "dewey" "dewey-raw" 1 "-Dbrowse.normalizer=org.vufind.util.DeweyCallNormalizer"