使用Solr向您的站点添加自定义搜索

Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。 文档通过Http利用XML 加到一个搜索集合中。查询该集合也是通过http收到一个XML/JSON响应来实现。它的主要特性包括:高效、灵活的缓存功能,垂直搜索功能,高亮显示搜索结果,通过索引复制来提高可用性,提供一套强大Data Schema来定义字段,类型和设置文本分析,提供基于Web的管理界面等。

开始之前

  1. 熟悉我们的入门教程并完成设置腾讯云CVM服务器主机名和时区的步骤。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。
  2. 本教程需要您更新系统和软件包存储库并进行安装wget工具,您可以参考我们社区的如何使用wget

注意 本教程中的步骤需要root权限。请确保以root身份或使用sudo前缀运行以下步骤。

安装Java

  • 安装Java 8 JDK:

Debian和Ubuntu

  • 添加Java 8存储库,下载GPG密钥并安装Java 8。
代码语言:javascript
复制
echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main" | tee /etc/apt/sources.list.d/webupd8team-java.list
echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main" | tee -a /etc/apt/sources.list.d/webupd8team-java.list
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886
apt update
apt install oracle-java8-installer
  • 在大多数系统上,还需要下载并安装oracle-java8-set-default软件包。要进行验证,请运行以下命令并检查匹配的输出。如果输出不匹配,请继续执行第三步.否则,Java 8安装完成:
代码语言:javascript
复制
dpkg --list | grep oracle

输出:

代码语言:javascript
复制
    ii  oracle-java8-installer        8u144-1~webupd8~0            all          Oracle Java(TM) Development Kit (JDK) 8
    ii  oracle-java8-set-default      8u144-1~webupd8~0            all          Set Oracle JDK 8 as default Java
  • 安装oracle-java8-set-default包:
代码语言:javascript
复制
apt install oracle-java8-set-default

以Fedora和RHEL为基础

代码语言:javascript
复制
    yum install java-1.8.0-openjdk.x86_64
**Arch Linux**
    pacman -S jre8-openjdk
**openSUSE**
    zypper in java-1_8_0-openjdk
  • 验证Java安装:
代码语言:javascript
复制
java -version

输出应类似于:

代码语言:javascript
复制
openjdk version "1.8.0_144"
OpenJDK Runtime Environment (IcedTea 3.5.1) (suse-13.3-x86_64)
OpenJDK 64-Bit Server VM (build 25.144-b01, mixed mode)

下载并安装Apache Solr

您可以将以下示例中的6.6.1的每个实例替换为Apache Solr官方网站上的最新版本。

  • 切换到/opt目录并下载Solr:
代码语言:javascript
复制
cd /opt
wget http://apache.claz.org/lucene/solr/6.6.1/solr-6.6.1.tgz
  • 从下载的存档中提取Solr安装脚本:
代码语言:javascript
复制
tar xzf solr-6.6.1.tgz solr-6.6.1/bin/install_solr_service.sh --strip-components=2
  • 执行Solr安装脚本。Arch Linux用户应该跳过以下Arch特定的步骤:
代码语言:javascript
复制
bash ./install_solr_service.sh solr-6.6.1.tgz

Arch Linux

  • 下载Arch Linux的安装脚本:
代码语言:javascript
复制
wget https://github.com/Darkstar90/solr-arch-install/blob/master/install_solr_service_arch.sh
  • 执行自定义Arch Linux安装脚本:
代码语言:javascript
复制
bash ./install_solr_service_arch.sh solr-6.6.1.tgz

​ 想要了解更多Linux教程请前往腾讯云+社区学习更多知识。

为Solr 创建防火墙规则

Solr 默认侦听端口8983。打开端口以允许使用首选防火墙管理器访问Web界面:

FirewallD

代码语言:javascript
复制
sudo firewall-cmd --zone=public --add-port=8983/tcp --permanent
sudo firewall-cmd --reload

UFW

代码语言:javascript
复制
ufw allow 8983/tcp comment "Solr port"

iptables

代码语言:javascript
复制
iptables -A INPUT -p tcp --dport 8983 -j ACCEPT -m comment --comment "Solr port"

注意 使用iptables-persistent保存你的iptables规则,否则它会在下次重启时丢失。

访问Solr管理页面

Solr通过面向Web的管理页面进行管理,可以通过您的腾讯云CVM的IP地址或8983端口上的域名来访问。

在Web浏览器中,输入您的Linode的IP地址或域名,然后输入端口8983

代码语言:javascript
复制
198.51.100.0:8983/solr

保护Solr管理页面

为Solr管理页面设置受密码保护的登录页面:

  • 切换到/opt/solr/server/etc并编辑webdefault.xml文件。在</web-app>之前,将以下内容添加到文件末尾:
代码语言:javascript
复制
    <login-config>
           <auth-method>BASIC</auth-method>
           <realm-name>Solr Admin Auth</realm-name>
    </login-config>    
    <security-constraint> 
           <web-resource-collection>
                 <web-resource-name>Solr Admin Auth</web-resource-name>
                 <url-pattern>/*</url-pattern>
          </web-resource-collection>
          <auth-constraint>
              <role-name>user</role-name>
          </auth-constraint>
       </security-constraint>
  • 在同一目录中,编辑jetty.xml文件并在</Configure>结尾之前添加以下内容:
代码语言:javascript
复制
    <Call name="addBean">
           <Arg>  
                <New class="org.eclipse.jetty.security.HashLoginService"> 
                      <Set name="name">Solr Admin Auth</Set> 
                      <Set name="config"><SystemProperty name="jetty.home" default="."/>/etc/realm.properties</Set>
                      <Set name="refreshInterval">0</Set> 
                 </New>
            </Arg>
     </Call>

  • 在当前目录中创建一个realm.properties文件以添加用户登录信息。用您选择的用户和安全密码替换用户名admin和密码admin123
代码语言:javascript
复制
    admin: admin123,user

在这里,admin:命令使用admin123密码来指定用户名“admin” 。而user命令将此新用户归类到webdefault.xml中已设置的“user”用户名称。

  • 重启solr服务:
代码语言:javascript
复制
systemctl restart solr
  • 您还可以使用此过程来保护Solr中的其他网页。例如,如果您创建了两个Solr搜索核心,core1并且core2,可以通过添加其他<url-pattern>行到webdefault.xml来限制对两者的访问:
代码语言:javascript
复制
<url-pattern>/core1/*</url-pattern>
<url-pattern>/core2/*</url-pattern>

通过在腾讯云CVM服务器上安装Solr,您现在可以创建搜索索引并添加数据,或将其与Web应用程序或网站集成。

了解更多

有关此主题的其他信息,您可能需要参考以下资源。

  • Apache Solr参考教程

参考文献:《Add a Custom Search to your Site with Solr》