• 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来访问搜索结果,封装接口提供给前端调用。^_^

  • 相关阅读:
    谎言,
    happy,
    架构,
    休闲游戏随想,
    IOS响应者链
    application 几个方法
    ios block 循环引用
    洛谷 P 1133 教主的花园
    Codevs 1148 == 洛谷 P1057 传球游戏
    Codevs 1169 == 洛谷 P1006 传纸条
  • 原文地址:https://www.cnblogs.com/microtiger/p/9012418.html
Copyright © 2020-2023  润新知