由于无法建议搜索短语,捕捉拼写错误,理解单词变体,组织和过滤结果以及索引搜索结果文档,因此WordPress内置的标准搜索无法为访问者提供最佳搜索体验。全文搜索引擎通常提供这些功能,Apache Solr是一个免费的开源选项。
在本指南中,您将学习如何在Ubuntu 14.x或Debian 7.x上安装Java,安装和配置Solr,并使用WPSolr插件将其集成到WordPress博客中。
注意本指南是为非root用户编写的。需要提升权限的命令带有前缀
sudo
。如果您不熟悉该sudo
命令,可以查看我们的“ 用户和组”指南。
由于Solr是一个Java Web应用程序,因此它需要Java Runtime Environment(JRE)。
openjdk-7-jre-headless
包:
sudo apt-get install openjdk-7-jre-headlessunzip
,curl
和php5-curl
包:
sudo apt-get install unzip curl php5-curl.tgz
文件的链接地址。wget
命令将该文件下载到您的主目录:
cd ~ wget http://apache.bytenet.in/lucene/solr/4.10.4/solr-4.10.4.tgz/opt
目录下安装Solr :
sudo tar -C /opt -xzvf solr-4.10.4.tgz对于Solr索引博客帖子,它需要知道博客数据的结构。Solr配置文件中描述了此结构。
复制的地址看起来类似于http://wpsolr.com/?wpdmdl=2064
。
wget
命令从复制的地址下载文件并将其另存为wpsolr_config.zip
。
wget -O wpsolr_config.zip http://wpsolr.com/?wpdmdl=2064wpsolr_config.zip
:
unzip wpsolr_config.zipschema.xml
并solrconfig.xml
进入/opt/solr-4.10.4/example/solr/collection1/conf
。复制前备份原始文件:
sudo cp /opt/solr-4.10.4/example/solr/collection1/conf/schema.xml /opt/solr-4.10.4/example/solr/collection1/conf/schema.xml.original sudo cp /opt/solr-4.10.4/example/solr/collection1/conf/solrconfig.xml /opt/solr-4.10.4/example/solr/collection1/conf/solrconfig.xml.original sudo cp schema.xml /opt/solr-4.10.4/example/solr/collection1/conf/ sudo cp solrconfig.xml /opt/solr-4.10.4/example/solr/collection1/conf/默认情况下,Solr侦听端口8983上所有IP地址的搜索请求。出于安全考虑,您可能希望更改它侦听的IP地址和/或端口。还建议只有WordPress能够查询Solr。
/opt/solr-4.10.4/example/etc/jetty.xml
。然后,在文本编辑器中打开文件:
sudo cp /opt/solr-4.10.4/example/etc/jetty.xml /opt/solr-4.10.4/example/etc/jetty.xml.backup<Set name="host"><SystemProperty name="jetty.host" /></Set>
为:
<Set name="host">localhost</Set><Set name="host"><SystemProperty name="jetty.host" /></Set>
为:
<Set name="host">123.45.67.89</Set>
替换123.45.67.89
为您自己的私有IP或FQDN。出于安全考虑,Solr应该使用自己的用户帐户和组运行。
注意应在安装了Solr的服务器上运行以下命令。
solr
:
sudo addgroup --system solrsolr
:
sudo adduser --system --ingroup solr --home /opt/solr-4.10.4 --shell /bin/sh --disabled-password --disabled-login solrsolr
:
sudo chown -R solr:solr /opt/solr-4.10.4注意在安装了Solr的服务器上运行以下命令。
/etc/init.d/solr
。或者,您可以从以下链接下载:
sudo nano /etc/init.d/solrJETTY_HOME=/opt/solr-4.10.4/example
行以匹配已安装的版本。
/etc/init.d/solr 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 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
#!/bin/sh -e # # /etc/init.d/solr -- startup script for Apache Solr # # ### BEGIN INIT INFO # Provides: solr # Required-Start: $local_fs $remote_fs $network # Required-Stop: $local_fs $remote_fs $network # Should-Start: $named # Should-Stop: $named # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start Solr # Description: Start Apache Solr jetty server ### END INIT INFO PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin NAME=solr DESC="Solr search engine" JETTY_HOME=/opt/solr-4.10.4/example START_JAR="$JETTY_HOME/start.jar" if [ `id -u` -ne 0 ]; then echo "You need root privileges to run this script" exit 1 fi # Make sure jetty is started with system locale if [ -r /etc/default/locale ]; then . /etc/default/locale export LANG fi . /lib/lsb/init-functions if [ -r /etc/default/rcS ]; then . /etc/default/rcS fi # Run Jetty as this user ID (default: jetty) # Set this to an empty string to prevent Jetty from starting automatically SOLR_USER=solr SOLR_GROUP=solr export JAVA="/usr/bin/java" # Extra options to pass to the JVM # Set java.awt.headless=true if JAVA_OPTIONS is not set so the # Xalan XSL transformer can work without X11 display on JDK 1.4+ # It also sets the maximum heap size to 256M to deal with most cases. JAVA_OPTIONS="-Djava.awt.headless=true" # Timeout in seconds for the shutdown of all webapps JETTY_SHUTDOWN=30 JETTY_STOP_PORT=17935 JETTY_STOP_KEY=stopsolr JETTY_ARGS="-Djetty.home=$JETTY_HOME -DSTOP.PORT=$JETTY_STOP_PORT -DSTOP.KEY=$JETTY_STOP_KEY" # Define other required variables PIDFILE="/var/run/$NAME.pid" WEBAPPDIR="$JETTY_HOME/webapps" ################################################## # Do the action ################################################## case "$1" in start) log_daemon_msg "Starting $DESC." "$NAME" if start-stop-daemon --quiet --test --start --pidfile "$PIDFILE" \ --user "$SOLR_USER" --group "$SOLR_GROUP" --startas "$JAVA" > /dev/null; then if [ -f $PIDFILE ] ; then log_warning_msg "$PIDFILE exists, but solr was not running. Ignoring $PIDFILE" fi start-stop-daemon --start --pidfile "$PIDFILE" --chuid "$SOLR_USER:$SOLR_GROUP" \ --chdir "$JETTY_HOME" --background --make-pidfile --startas $JAVA -- \ $JAVA_OPTIONS $JETTY_ARGS -jar $START_JAR --daemon log_daemon_msg "$DESC started" "$NAME" sleep 5 if start-stop-daemon --test --start --pidfile "$PIDFILE" \ --user $SOLR_USER --group $SOLR_GROUP --startas "$JAVA" > /dev/null; then log_end_msg 1 else log_end_msg 0 fi else log_warning_msg "(already running)." log_end_msg 0 exit 1 fi ;; stop) log_daemon_msg "Stopping $DESC." "$NAME" if start-stop-daemon --quiet --test --start --pidfile "$PIDFILE" \ --user "$SOLR_USER" --group "$SOLR_GROUP" --startas "$JAVA" > /dev/null; then if [ -x "$PIDFILE" ]; then log_warning_msg "(not running but $PIDFILE exists)." else log_warning_msg "(not running)." fi else start-stop-daemon --quiet --stop \ --pidfile "$PIDFILE" --user "$SOLR_USER" --group "$SOLR_GROUP" \ --startas $JAVA -- $JAVA_OPTIONS $JETTY_ARGS -jar $START_JAR --stop > /dev/null while ! start-stop-daemon --quiet --test --start \ --pidfile "$PIDFILE" --user "$SOLR_USER" --group "$SOLR_GROUP" \ --startas "$JAVA" > /dev/null; do sleep 1 log_progress_msg "." JETTY_SHUTDOWN=`expr $JETTY_SHUTDOWN - 1` || true if [ $JETTY_SHUTDOWN -ge 0 ]; then start-stop-daemon --oknodo --quiet --stop \ --pidfile "$PIDFILE" --user "$SOLR_USER" --group "$SOLR_GROUP" \ --startas $JAVA -- $JAVA_OPTIONS $JETTY_ARGS -jar $START_JAR --stop else log_progress_msg " (killing) " start-stop-daemon --stop --signal 9 --oknodo \ --quiet --pidfile "$PIDFILE" \ --user "$SOLR_USER" --group "$SOLR_GROUP" fi done rm -f "$PIDFILE" log_daemon_msg "$DESC stopped." "$NAME" log_end_msg 0 fi ;; status) if start-stop-daemon --quiet --test --start --pidfile "$PIDFILE" \ --user "$SOLR_USER" --group "$SOLR_GROUP" --startas "$JAVA" > /dev/null; then if [ -f "$PIDFILE" ]; then log_success_msg "$DESC is not running, but pid file exists." exit 1 else log_success_msg "$DESC is not running." exit 3 fi else log_success_msg "$DESC is running with pid `cat $PIDFILE`" fi ;; restart|force-reload) if ! start-stop-daemon --quiet --test --start --pidfile "$PIDFILE" \ --user "$SOLR_USER" --group "$SOLR_GROUP" --startas "$JAVA" > /dev/null; then $0 stop $* sleep 1 fi $0 start $* ;; try-restart) if start-stop-daemon --quiet --test --start --pidfile "$PIDFILE" \ --user "$SOLR_USER" --group "$SOLR_GROUP" --startas "$JAVA" > /dev/null; then $0 start $* fi ;; *) log_success_msg "Usage: $0 {start|stop|restart|force-reload|try-restart|status}" exit 1 ;; esac exit 0在安装了Solr的服务器上运行以下命令:
curl http://localhost:8983/solr/collection1/select
如果它显示类似的输出,则Solr已正确安装和配置:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader"><int name="status">0</int><int name="QTime">1</int><lst name="params"/></lst><result name="response" numFound="0" start="0"></result>
</response>
如果Solr安装在与WordPress不同的服务器上,请通过向Solr服务器发送请求从WordPress服务器重复测试:
curl http://HOSTNAME-OR-IP-OF-SOLR-SERVER:8983/solr/collection1/select
plugins/
。/opt/solr-4.10.4/example/etc/jetty.xml
。如果Solr与WordPress安装在同一台服务器上,请输入localhost
。如果Solr安装在其他服务器上,请输入相同的IP地址或主机名。/opt/solr-4.10.4/example/etc/jetty.xml
。/solr/collection1
为默认的Solr核心。Solr服务器可以运行多个Solr核心,每个核心服务于一组不同的搜索数据。有关Solr内核的更多信息,请浏览Solr Core wiki。按绿色“+”按钮添加构面。此处添加的内容在搜索结果页面中显示为过滤器。通常,类别和标签就足够了,但如果博客有多个贡献者或自定义分类法,您可能还希望将这些值添加为其他方面。
操作完成后,同一页面将显示索引的文档数量。
您的博客上将完成以下步骤。
搜索引擎数据存储在/opt/solr-4.10.4/example/solr/collection1/data
目录中。
如果您的服务器有数据备份过程,则可以通过/opt/solr-4.10.4/example/solr/collection1/data
在备份中包含该目录来备份搜索数据。
搜索数据的备份并不重要,因为它总是可以从WordPress数据库重新创建。但是,对于包含数千个帖子和附件的大型博客,备份和恢复搜索数据将比重新创建它快得多。总的来说,当从另一个WordPress服务器迁移或合并博客时,推荐的方法是重新创建搜索数据。
迁移或合并后,转到位于管理面板的WPSOLR插件部分的Solr操作选项,然后按下使用我的Solr索引同步Wordpress以重新创建搜索数据。