前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Solr涡轮增压您的WordPress搜索

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

作者头像
GongAo啊_
发布2018-09-03 15:56:45
4.9K1
发布2018-09-03 15:56:45
举报
文章被收录于专栏:Maroon1105Maroon1105

由于无法建议搜索短语,捕捉拼写错误,理解单词变体,组织和过滤结果以及索引搜索结果文档,因此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

下载并安装Solr Permalink

  1. 在浏览器中打开Solr下载站点
  2. Apache将根据位置提供下载链接:
选择Apache下载镜像站点
选择Apache下载镜像站点
  1. 单击链接以打开Solr版本的页面:
Solr发布列表
Solr发布列表
  1. 单击最高可用的4.x版本以查看该版本中的文件: 注意由于Solr 5.x仍处于测试阶段,其配置程序与4.x不同,WPSolr尚未与5.x版本兼容。
Solr发布目录列表
Solr发布目录列表
  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版本的链接地址:
WPSolr配置下载
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的服务器上运行以下命令:

代码语言:javascript
复制
curl http://localhost:8983/solr/collection1/select

如果它显示类似的输出,则Solr已正确安装和配置:

代码语言:javascript
复制
<?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服务器重复测试:

代码语言:javascript
复制
curl http://HOSTNAME-OR-IP-OF-SOLR-SERVER:8983/solr/collection1/select

安装和配置WPSolr

安装WPSolr插件

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

配置WPSolr插件

  1. 打开WPSolr页面:
WPSolr管理页面
WPSolr管理页面
  1. 单击我将我的2个兼容配置文件上传到我的Solr核心的按钮:
WPSolr首先配置
WPSolr首先配置
  1. 在下一页上,选择Self Hosted选项:
WPSolr托管选项卡
WPSolr托管选项卡
  1. 选择Self Hosted时,插件会提示您输入有关Solr服务器的详细信息:
WPSolr自托管设置
WPSolr自托管设置
  • 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选项卡:
WPSolr索引选项
WPSolr索引选项
  • 要编制索引的帖子类型:建议选择所有类型发布索引所有博客帖子,页面所有页面(例如关于页面),以及附件所有文档(例如PDF和DOC文件)。
  • 要编制索引的自定义分类法:一般不需要在此处输入任何内容; 但是,如果已自定义WordPress以按类别和标签以外的方式组织博客帖子,请在此处输入分类标准的名称。
  • 要编制索引的自定义字段:通常不需要在此处选择任何内容。
  • 索引注释:如果希望搜索结果包含注释,请选择此选项。这仅适用于评论为帖子增加一些价值且严格审核的博客。
  • 排除项目:如果您希望从搜索结果中排除某些帖子或页面,请在此处输入其ID。
  1. 按“ 保存选项”按钮。
  2. 打开Solr选项>结果选项页面:
WPSolr结果选项
WPSolr结果选项
  • 显示建议(您的意思是?):推荐。如果选中,Solr将建议备用搜索短语,如果找不到输入的搜索短语的任何匹配项:
WPSolr的建议
WPSolr的建议
  • 显示结果数量和当前页面:推荐。这对于分页搜索结果很有用。
  • 替换默认的WordPress搜索:推荐。这将使用Solr替换默认WordPress搜索框以显示自动完成建议。
  • 每页结果数:配置每页应显示的搜索结果数。
  • 由构显示的值的数量面是指Solr显示的过滤器,以使访问者能够从搜索结果中列出候选名单。此值是每个构面显示的最大值数。例如,在下图中,此值已设置为5,因此标签 facet最多显示5个标签过滤器。
方面数
方面数
  1. 按“ 保存选项”按钮。
  2. 接下来,打开Solr Options> Facets Options页面:
WPSolr Facet选项
WPSolr Facet选项

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

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

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

测试新搜索

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

  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以重新创建搜索数据。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 先决条件
  • 安装Java
  • 安装unzip,curl和php5-curl
  • 安装和配置Solr
    • 下载并安装Solr Permalink
      • 安装WPSolr配置文件
        • 更改Solr的IP地址和端口(可选)
          • 为Solr Permanlink创建用户帐户和用户组
            • 将Solr配置为启动服务
            • 测试Solr
            • 安装和配置WPSolr
              • 安装WPSolr插件
                • 配置WPSolr插件
                • 测试新搜索
                • 搜索数据的位置
                • 备份或还原搜索数据
                相关产品与服务
                数据保险箱
                数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档