#! /bin/bash urlencode() { # urlencode old_lc_collate=$LC_COLLATE LC_COLLATE=C local length="${#1}" for (( i = 0; i < length; i++ )); do local c="${1:i:1}" case $c in [a-zA-Z0-9.~_-]) printf "$c" ;; *) printf '%%%02X' "'$c" ;; esac done LC_COLLATE=$old_lc_collate } # Default parameters # Encode parameters (as blank spaces) TERM=`urlencode "$1"` # Default fields FL=${2:-url,title,lang,score} FQ=$3 # Default query term QT=${4:-select} # Filter query COLLECTION=${5:-zylk} SERVER=${6:-localhost} PORT=${7:-8983} if [ -z "$1" ]; then # Usage echo 'Usage: do-search.sh [ ]' else NUMROWS=`curl -s "http://${SERVER}:${PORT}/solr/${COLLECTION}/${QT}?fq=$FQ&indent=on&q=${TERM}&wt=json" | jq '.response.numFound'` ROWS=10000 COUNT=0 START=0 while [ $START -lt $NUMROWS ]; do # Only 10 results finally #curl -s "http://${SERVER}:${PORT}/solr/${COLLECTION}/${QT}?fl=$FL&indent=on&q=$TERM&rows=$ROWS&start=$START&wt=json" | jq '.response.docs[]' echo "curl -s \"http://${SERVER}:${PORT}/solr/${COLLECTION}/${QT}?fq=$FQ&fl=$FL&indent=on&q=$TERM&rows=10&start=$START&wt=json\"" curl -s "http://${SERVER}:${PORT}/solr/${COLLECTION}/${QT}?fq=$FQ&fl=$FL&indent=on&q=$TERM&rows=10&start=$START&wt=json" | jq '.response.docs[]' COUNT=$((COUNT+1)) START=$((ROWS*COUNT)) done echo "Number of results for search: $1 --> $NUMROWS" fi