专栏首页Maroon1105使用Solr涡轮增压您的WordPress搜索

使用Solr涡轮增压您的WordPress搜索

由于无法建议搜索短语,捕捉拼写错误,理解单词变体,组织和过滤结果以及索引搜索结果文档,因此WordPress内置的标准搜索无法为访问者提供最佳搜索体验。全文搜索引擎通常提供这些功能,Apache Solr是一个免费的开源选项。

在本指南中,您将学习如何在Ubuntu 14.x或Debian 7.x上安装Java,安装和配置Solr,并使用WPSolr插件将其集成到WordPress博客中。

注意本指南是为非root用户编写的。需要提升权限的命令带有前缀sudo。如果您不熟悉该sudo命令,可以查看我们的“ 用户和组”指南。

先决条件

  • 必须已安装和配置WordPress。如果您尚未安装WordPress,请按照使用WordPress指南管理Web内容
  • 本指南的大部分内容都假定Solr与WordPress安装在同一台服务器上; 但是,出于安全性或可伸缩性的原因,Solr可以安装在第二台服务器上。如果Solr安装在第二台服务器上,则提供备用步骤。

安装Java

由于Solr是一个Java Web应用程序,因此它需要Java Runtime Environment(JRE)

  1. 使用以下命令检查服务器上是否已安装Java: whereis java java -version 如果已经安装了Java,它将输出可执行Java文件的路径和正在运行的Java版本。跳到下一步
  2. 安装openjdk-7-jre-headless包: sudo apt-get install openjdk-7-jre-headless
  3. 安装JRE后,通过检查版本来测试它: java -version 如果它正常工作,它应该产生类似的输出: java version "1.7.0_75" OpenJDK Runtime Environment (IcedTea 2.5.4) (7u75-2.5.4-1~deb7u1) OpenJDK 64-Bit Server VM (build 24.75-b04, mixed mode)

安装unzip,curl和php5-curl

  1. 安装unzipcurlphp5-curl包: sudo apt-get install unzip curl php5-curl
  2. 重新启动托管WordPress的HTTP服务器: sudo service apache2 restart

安装和配置Solr

  1. 在浏览器中打开Solr下载站点
  2. Apache将根据位置提供下载链接:
  1. 单击链接以打开Solr版本的页面:
  1. 单击最高可用的4.x版本以查看该版本中的文件: 注意由于Solr 5.x仍处于测试阶段,其配置程序与4.x不同,WPSolr尚未与5.x版本兼容。
  1. 复制非源.tgz文件的链接地址。
  2. 在您的Linode上,使用以下wget命令将该文件下载到您的主目录: cd ~ wget http://apache.bytenet.in/lucene/solr/4.10.4/solr-4.10.4.tgz
  3. /opt目录下安装Solr : sudo tar -C /opt -xzvf solr-4.10.4.tgz

安装WPSolr配置文件

对于Solr索引博客帖子,它需要知道博客数据的结构。Solr配置文件中描述了此结构。

  1. WPSolr在其网站上提供现成的配置文件。访问WPSolr网站,获取Solr版本的最新WPSolr版本的链接地址:

复制的地址看起来类似于http://wpsolr.com/?wpdmdl=2064

  1. 在安装了Solr的服务器上,使用该wget命令从复制的地址下载文件并将其另存为wpsolr_config.zip。 wget -O wpsolr_config.zip http://wpsolr.com/?wpdmdl=2064
  2. 提取wpsolr_config.zip: unzip wpsolr_config.zip
  3. 复制schema.xmlsolrconfig.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的IP地址和端口(可选)

默认情况下,Solr侦听端口8983上所有IP地址的搜索请求。出于安全考虑,您可能希望更改它侦听的IP地址和/或端口。还建议只有WordPress能够查询Solr。

  1. 首先,备份/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
  2. 找到设置侦听主机和端口的部分: /opt/solr-4.10.4/example/etc/jetty.xml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <!-- <Call name="addConnector"> <Arg> <New class="org.eclipse.jetty.server.nio.SelectChannelConnector"> <Set name="host"><SystemProperty name="jetty.host" /></Set> <Set name="port"><SystemProperty name="jetty.port" default="8983"/></Set> <Set name="maxIdleTime">50000</Set> <Set name="Acceptors">2</Set> <Set name="statsOn">false</Set> <Set name="confidentialPort">8443</Set> <Set name="lowResourcesConnections">5000</Set> <Set name="lowResourcesMaxIdleTime">5000</Set> </New> </Arg> </Call> -->
  3. 设置适当的侦听IP地址:
    • 如果Solr 与WordPress 位于同一服务器上,请替换<Set name="host"><SystemProperty name="jetty.host" /></Set>为: <Set name="host">localhost</Set>
    • 如果Solr 与WordPress 位于不同的服务器上,请替换<Set name="host"><SystemProperty name="jetty.host" /></Set>为: <Set name="host">123.45.67.89</Set> 替换123.45.67.89为您自己的私有IP或FQDN。

为Solr Permanlink创建用户帐户和用户组

出于安全考虑,Solr应该使用自己的用户帐户和组运行。

注意应在安装了Solr的服务器上运行以下命令。

  1. 创建一个名为的组solr: sudo addgroup --system solr
  2. 创建一个名为的用户solr: sudo adduser --system --ingroup solr --home /opt/solr-4.10.4 --shell /bin/sh --disabled-password --disabled-login solr
  3. 将Solr目录的所有权转让给用户solr: sudo chown -R solr:solr /opt/solr-4.10.4

将Solr配置为启动服务

注意在安装了Solr的服务器上运行以下命令。

  1. 使用文本编辑器创建新脚本/etc/init.d/solr。或者,您可以从以下链接下载: sudo nano /etc/init.d/solr
  2. 将以下文本复制到编辑器中,保存并关闭它: 注意如果使用不同版本的Solr,请更改该JETTY_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
  3. 保存脚本后,运行以下命令: sudo chmod ugo+x /etc/init.d/solr sudo update-rc.d solr defaults sudo update-rc.d solr enable sudo service solr start

测试Solr

在安装了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

安装和配置WPSolr

安装WPSolr插件

  1. 通过WordPress管理控制台或将文件下载到您的目录中,安装WPSolr WordPress插件plugins/
  2. 在“ 插件”页面上,在几秒钟内激活名为Enterprise Search的插件:
  1. WordPress然后显示插件激活消息并将WPSOLR菜单项添加到侧边栏:

配置WPSolr插件

  1. 打开WPSolr页面:
  1. 单击我将我的2个兼容配置文件上传到我的Solr核心的按钮:
  1. 在下一页上,选择Self Hosted选项:
  1. 选择Self Hosted时,插件会提示您输入有关Solr服务器的详细信息:
  • Solr主机:这应该与输入的主机的值相同/opt/solr-4.10.4/example/etc/jetty.xml。如果Solr与WordPress安装在同一台服务器上,请输入localhost。如果Solr安装在其他服务器上,请输入相同的IP地址或主机名。
  • Solr端口:此值应与输入的端口值相同/opt/solr-4.10.4/example/etc/jetty.xml
  • Solr Path:将此值设置/solr/collection1为默认的Solr核心。Solr服务器可以运行多个Solr核心,每个核心服务于一组不同的搜索数据。有关Solr内核的更多信息,请浏览Solr Core wiki
  1. Check Solr Status,然后按Save按钮。如果一切设置正确,它将显示绿色勾号。
  2. 单击Solr Options选项卡:
  • 要编制索引的帖子类型:建议选择所有类型发布索引所有博客帖子,页面所有页面(例如关于页面),以及附件所有文档(例如PDF和DOC文件)。
  • 要编制索引的自定义分类法:一般不需要在此处输入任何内容; 但是,如果已自定义WordPress以按类别和标签以外的方式组织博客帖子,请在此处输入分类标准的名称。
  • 要编制索引的自定义字段:通常不需要在此处选择任何内容。
  • 索引注释:如果希望搜索结果包含注释,请选择此选项。这仅适用于评论为帖子增加一些价值且严格审核的博客。
  • 排除项目:如果您希望从搜索结果中排除某些帖子或页面,请在此处输入其ID。
  1. 按“ 保存选项”按钮。
  2. 打开Solr选项>结果选项页面:
  • 显示建议(您的意思是?):推荐。如果选中,Solr将建议备用搜索短语,如果找不到输入的搜索短语的任何匹配项:
  • 显示结果数量和当前页面:推荐。这对于分页搜索结果很有用。
  • 替换默认的WordPress搜索:推荐。这将使用Solr替换默认WordPress搜索框以显示自动完成建议。
  • 每页结果数:配置每页应显示的搜索结果数。
  • 由构显示的值的数量面是指Solr显示的过滤器,以使访问者能够从搜索结果中列出候选名单。此值是每个构面显示的最大值数。例如,在下图中,此值已设置为5,因此标签 facet最多显示5个标签过滤器。
  1. 按“ 保存选项”按钮。
  2. 接下来,打开Solr Options> Facets Options页面:

按绿色“+”按钮添加构面。此处添加的内容在搜索结果页面中显示为过滤器。通常,类别标签就足够了,但如果博客有多个贡献者或自定义分类法,您可能还希望将这些值添加为其他方面。

  1. 转到Solr Operations选项卡,然后单击Synchronize Wordpress with my Solr index按钮。 注意每当您发布新帖子或页面或附件时,必须选择此按钮才能将新页面编入索引。

操作完成后,同一页面将显示索引的文档数量。

测试新搜索

您的博客上将完成以下步骤。

  1. 通过开始在您的某篇博文中输入您知道的单词来测试自动填充。在您输入时,搜索框应在下拉列表中显示一些建议:
  1. 输入搜索短语测试搜索结果。应显示匹配结果:
  1. 通过输入包含某些拼写错误的单词或任何博客帖子中未出现的单词来测试自动更正建议。它应该显示你的意思是建议:
  1. 通过创建和发布一些添加了文件附件(如PDF)的测试帖来测试 文档搜索。更新搜索数据,然后搜索您知道附件中出现的短语。它应该在这些附件中显示匹配项:

搜索数据的位置

搜索引擎数据存储在/opt/solr-4.10.4/example/solr/collection1/data目录中。

备份或还原搜索数据

如果您的服务器有数据备份过程,则可以通过/opt/solr-4.10.4/example/solr/collection1/data在备份中包含该目录来备份搜索数据。

搜索数据的备份并不重要,因为它总是可以从WordPress数据库重新创建。但是,对于包含数千个帖子和附件的大型博客,备份和恢复搜索数据将比重新创建它快得多。总的来说,当从另一个WordPress服务器迁移或合并博客时,推荐的方法是重新创建搜索数据。

迁移或合并后,转到位于管理面板的WPSOLR插件部分的Solr操作选项,然后按下使用我的Solr索引同步Wordpress以重新创建搜索数据。

本文的版权归 GongAo啊_ 所有,如需转载请联系作者。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java UDP的简单实例以及知识点简述

      Java中实现UDP协议的两个类,分别是DatagramPacket数据包类以及DatagramSocket套接字类。

    Rekent
  • Java 循环队列的实现

      队列(Queue)是限定只能在一端插入、另一端删除的线性表。允许删除的一端叫做队头(front),允许插入的一端叫做队尾(rear),没有元素的队列称为“空...

    Rekent
  • Java 实现二叉树的构建以及3种遍历方法

    大二下学期学习数据结构的时候用C介绍过二叉树,但是当时热衷于java就没有怎么鸟二叉树,但是对二叉树的构建及遍历一直耿耿于怀,今天又遇见这个问题了,所以花了一下...

    Rekent
  • Java 通过先序中序序列生成二叉树

      二叉树的前序以及后续序列,以空格间隔每个元素,重构二叉树,最后输出二叉树的三种遍历方式的序列以验证。

    Rekent
  • 栈的Java简单实现

      进行插入和删除操作的一端称为“栈顶”(top),另一端称为“栈底”(bottom)。

    Rekent
  • Java 线程池的实现

            任务接口:每个任务必须实现的接口,主要用来规定任务的入口、任务执行完后的收尾工作、任务的执行状态等。 工作线程通过该接口调度任务的执行。

    Rekent
  • 详尽! Win10安装Java8+Tomcat9!

    Java也好, Tomcat也好, 都是很实用的啦, 早点掌握还是有必要的. 喜欢记得点赞哦, 有意见或者建议评论区哦, 当然暗中关注我也是可以的.

    SeanDepp
  • Java TCP通信概念及实例

                  <1>TCP:类似于电话系统,建立双向的通信通道,确定连接,话音顺序接听。

    Rekent
  • Java 冒泡排序与快速排序的实现

          (1)基于交换思想的排序算法         (2)从一端开始,逐个比较相邻的两个元素,发现倒序即交换。           (3)一次遍历,一定能...

    Rekent

扫码关注云+社区

领取腾讯云代金券