lucene/solr/bin/post

119 lines
3.8 KiB
Plaintext
Raw Normal View History

#!/usr/bin/env bash
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Usage:
# bin/post <collection> <file(s)|url> [<params to SimplePostTool>]
# bin/post gettingstarted http://lucidworks.com [recursive=1] [delay=1]
# bin/post tehfiles ~/Documents
# bin/post signals LATEST-signals.csv
# bin/post records article*.xml
# bin/post wizbang events.json
# TODO: handle stdin as well, such that `cat foo.csv | bin/post my_collection` works
# ====== Common code copied from bin/solr (TODO: centralize/share this kind of thing)
if [ -n "$SOLR_JAVA_HOME" ]; then
JAVA=$SOLR_JAVA_HOME/bin/java
elif [ -n "$JAVA_HOME" ]; then
for java in "$JAVA_HOME"/bin/amd64/java "$JAVA_HOME"/bin/java; do
if [ -x "$java" ]; then
JAVA="$java"
break
fi
done
else
JAVA=java
fi
# test that Java exists and is executable on this server
$JAVA -version >/dev/null 2>&1 || { echo >&2 "Java is required to run this tool! Please install Java 8 or greater before running this script."; exit 1; }
# ===== post specific code
function print_usage() {
echo ""
echo "Usage: post <collection/core> <file|directory|url> [OPTIONS]"
echo " or post -help"
echo ""
} # end print_usage
if [[ $# -eq 1 && ("$1" == "-help" || "$1" == "-h" || "$1" == "-usage") ]]; then
print_usage
exit
fi
TOOL_JAR=dist/solr-core-*.jar
COLLECTION=$1; shift
# TODO: fix globbing issues... bin/post collection *.xml doens't work as expected (only first file indexed?)
# TODO: fix bin/post *.xml issues, where collection isn't specified, so it assumes first passed file name is collection name
# TODO: Check that $COLLECTION actually exists? How to determine if user omitted collection name as first param?
# "$JAVA" -classpath "$TOOL_JAR" org.apache.solr.util.SolrCLI $* # except can't easily check for core existence with SolrCLI?
# TODO: also need a more general way to set the URL (or just server or port) rather than passing url=... at the end.
echo "Collection:" $COLLECTION
PROPS="-Dc=$COLLECTION"
PARAMS=""
echo -n "Data mode: "
if [[ $1 == http* ]]; then
echo "WEB"
PROPS="$PROPS -Ddata=web"
PARAMS=$1; shift
else
if [[ -d $1 ]]; then
# Directory
echo "DIRECTORY"
PROPS="$PROPS -Ddata=files -Dauto -Drecursive"
PARAMS=$1; shift
else
# Not a URL or existing directory, assume file(s)
echo "FILE"
FILE=$1; shift
EXTENSION="${FILE##*.}"
PARAMS=$FILE
if [[ $EXTENSION == xml || $EXTENSION == csv || $EXTENSION == json ]]; then
# Solr /update supported type (default being application/xml).
if [[ $EXTENSION == csv ]]; then
PROPS="$PROPS -Dtype=text/csv"
fi
if [[ $EXTENSION == json ]]; then
PROPS="$PROPS -Dtype=application/json"
fi
else
PROPS="$PROPS -Dauto=yes"
fi
fi
fi
# Add all additonal trailing script parameters as system properties to SPT (eg. bin/post core_name ~/Documents depth=1)
while [ $# -gt 0 ]; do
PROPS="$PROPS -D$1"
shift
done
echo "$JAVA" -classpath "$TOOL_JAR" $PROPS org.apache.solr.util.SimplePostTool $PARAMS
$JAVA -classpath $TOOL_JAR $PROPS org.apache.solr.util.SimplePostTool $PARAMS