zoukankan      html  css  js  c++  java
  • PHP-从零开始使用Solr搜索引擎服务(上)

    使用搜索引擎,我们常规的数据查询会快很多,还可以对关键词进行中文分词查询,返回一些高亮,就和我们每天使用的搜索服务一样。我们这里要使用Solr来进行我们的搜索服务搭建。如果你使用php,很可能你会在网上查到Sphinx这个搜索引擎,说是对php支持的很好,不要迟疑,远离它,这个尼玛官网都没了,已经很多年没更新了,中文更是没办法支持,功能更是非常有限。Solr一直在更新版本,用的人很多,官网http://lucene.apache.org/solr/,可以了解详情。

    Solr是一套java写的独立搜索引擎,当然了,如果你不会java,没有任何关系。

    废话少说,我们先看怎么在服务器上安装支持中文的Solr服务(本文是基于solr最新的6.5+版本),

    1:安装

    首先看下服务器的java环境配置

    如果低于1.8,你就要先升级服务器环境了,这个我就不描述了。

    java环境配置完成之后,进入你想要安装搜索引擎的目录,直接在官网下载solr的压缩包wget https://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/6.6.0/solr-6.6.0.tgz

    (我前段时间在项目中用的时候还是6.5.1版本,现在已经6.6.0了,我这为了方便还使用6.5.1的案例描述)

    下载完成之后解压目录是这样子的

    打开example进入

    solr-6.6.0/example/example-DIH/solr

    会发现已经几个demo样子的目录

    [root@10-10-87-38 solr]# ls
    atom db mail solr solr.xml tika
    [root@10-10-87-38 solr]#

    这里需要说明一下,这个atom、db、mail等都是单独的搜索业务,大的项目里可能会拆分出像这样很多的搜索业务类型。我们复制其中的一个,如mail整个目录复制到/usr/solr-6.6.0/server/solr,

    这个目录才是搜索引擎最终的查找目录,所有搜索的配置以及数据库的索引等都在这个目录下,mail 下的文件结构是这样的

    [root@10-10-87-38 mail]# ls
    conf core.properties data
    [root@10-10-87-38 mail]#

    2:启动搜索引擎

    配置搜索,只需要关注conf就可以了,打开conf

    [root@10-10-87-38 conf]# ls
    admin-extra.html clustering lang mapping-FoldToASCII.txt solrconfig.xml synonyms.txt
    admin-extra.menu-bottom.html currency.xml mail-data-config.xml mapping-ISOLatin1Accent.txt spellings.txt update-script.js
    admin-extra.menu-top.html elevate.xml managed-schema protwords.txt stopwords.txt xslt
    [root@10-10-87-38 conf]#

    这时候应该就可以启动一个空的搜索服务了。

    进入Solr的根目录

    [root@10-10-87-38 bin]# ls
    init.d install_solr_service.sh oom_solr.sh post solr solr.cmd solr.in.cmd solr.in.sh
    [root@10-10-87-38 bin]# ./solr start 
    WARNING: Starting Solr as the root user is a security risk and not considered best practice. Exiting.
    Please consult the Reference Guide. To override this check, start with argument '-force'
    [root@10-10-87-38 bin]# ./solr start -force
    Waiting up to 180 seconds to see Solr running on port 8983 [|] 
    Started Solr server on port 8983 (pid=9757). Happy searching!
    [root@10-10-87-38 bin]#

    这时候搜索引擎已经启动了,你可以在浏览器上打开一个Solr的管理界面,地址框输入

    http://10.10.87.38:8983/solr/#/mail

    注意左边红色框,下拉框里会显示上面你从example里复制过来的项目,红框里有一个Query,就是搜索关键词用的,你可以在这里边测试你的搜索服务是否正常,具体你可以自己点进去看一看就明白了,当然了,随便复制过来的mail肯定是不能工作的,因为这个没有连接到你自己的数据库。

    3:配置Solr

    重新回到/solr-6.5.1/server/solr目录下

    我这复制了mail,然后改名字为crm,作为我自己的搜索模块。下面就要配置这个crm了

    进入

    /solr-6.5.1/server/solr/crm/conf

    [root@10-10-87-38 conf]# ls
    admin-extra.html clustering db-data-config.xml managed-schema protwords.txt stopwords.txt xslt
    admin-extra.menu-bottom.html currency.xml elevate.xml mapping-FoldToASCII.txt solrconfig.xml synonyms.txt
    admin-extra.menu-top.html dataimport.properties lang mapping-ISOLatin1Accent.txt spellings.txt update-script.js
    [root@10-10-87-38 conf]#

    配置db-data-config.xml

    这个是配置数据库的,由于我这使用的mysql,然后要搜索的只有一张表,所以配置就比较简单了

    你要搜索很多表的话,就配置多个entity,(我这业务上没这需求,咱们没研究这块)这个配置是让solr对数据库的字段内容建立索引并保存下来,搜索的时候不再查找数据库,直接查找索引返回结果

    配置solrconfig.xml

    这个是solr本身的配置,基本包含高亮显示,返回字段长短,查询超时设置等等,如果不做高级定制,这个文件基本不用动,唯一要注意的是

    <requestHandler name="/dataimport" class="solr.DataImportHandler">
    <lst name="defaults">
    <str name="config">db-data-config.xml</str>
    </lst>
    </requestHandler>

    配置managed-schema

    这个文件很重要了,你可以在这里配置你要搜索的字段的属性,这里面你会看到很多的field节点,看一下就会知道怎么设置了。

    4:配置中文搜索

    默认的是不支持中文搜索的,我们还要添加中文的jar包

    网上搜索一下ik-analyzer,下载ik中文分词包放在lib文件夹下

    [root@10-10-87-38 solr]# cd crm/
    [root@10-10-87-38 crm]# ls
    conf core.properties data lib
    [root@10-10-87-38 crm]# cd lib
    [root@10-10-87-38 lib]# ls
    IKAnalyzer.cfg.xml ext.dic ik-analyzer-solr5-5.x.jar solr-analyzer-ik-5.1.0.jar
    derby-10.9.1.0.jar hsqldb-1.8.0.10.jar mysql-connector-java-5.1.42.jar stopword.dic
    [root@10-10-87-38 lib]# pwd
    /solr-6.5.1/server/solr/crm/lib
    [root@10-10-87-38 lib]#

    分词包装好后要返回到managed-schema配置中文分词的支持

    在文件末尾添加节点

    然后在你想要搜索中文的字段里添加ik分词

    5:完成Solr

    保存所有修改过的配置,然后重启Solr服务。再从浏览器进入Solr管理界面。

    首先我们要验证一下中文分词是否配置成功了(中文没配置成功,我们的搜索就没有意义)

    像这样子的,你的中文分词就配置成功了。

    下面就可以测试你的搜索了

    看到这样的界面就说明Solr的搜索引擎服务配置完全成功了!

    现在可以庆祝第一阶段的胜利了。

    接下来我们就要使用PHP来访问搜索结果,封装接口提供给前端调用。^_^

  • 相关阅读:
    关于这个 blog
    P6499 [COCI2016-2017#2] Burza 题解
    CF1172F Nauuo and Bug 题解
    CF1479D Odd Mineral Resource 题解
    CF1442E Black, White and Grey Tree 题解
    CF1442D Sum 题解
    CF1025D Recovering BST 题解
    CF1056E Check Transcription 题解
    CF1025F Disjoint Triangles 题解
    红包算法的PHP实现
  • 原文地址:https://www.cnblogs.com/microtiger/p/9012418.html
Copyright © 2011-2022 走看看