我是靠谱客的博主 野性钻石,最近开发中收集的这篇文章主要介绍AnyQ如何配置solr动态读取数据库——AnyQ系列之二,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、anyq容器host模式运行

由于anyq容器,后期还会有其他端口需要访问,比如solr的webapp页面端口就是8900,等等。所以可以采用host方法run一个新的容器。

#提交anyq镜像,生成新镜像anyq-host,并run新的anyq-host容器
docker stop anyq
docker commit anyq anyq-host
#使用--privileged=true和/usr/sbin/init参数确保在容器中可以用systemctl命令
docker run -itd --name=anyq-host --privileged=true --network=host anyq-host  /usr/sbin/init
docker exec -it anyq-host /bin/bash

二、在容器anyq-host中启动solr

##5.进入home目录
cd home
##6.配置java环境
export PATH=`pwd`/jdk1.8.0_171/bin:$PATH
##7.进入AnyQ/build目录
cd AnyQ
cd build
##8.启动solr
sh solr_script/anyq_solr.sh solr_script/sample_docs

三、在浏览器中查看solr的webapp面板

1.打开面板
打开浏览器,输入http://192.168.99.100:8900/solr/即可。192.168.99.100是win7中docker-machine默认ip地址。*nix(或Ubuntu桌面版)中应该是http://127.0.0.1:8900/solr/。如下图所示,表明solr运行成功。
solr_webapp页面2.通过左下角选择器选择集合collection1
在这里插入图片描述3.在Documents选项卡中上传文档(上传数据)
在这里插入图片描述4.在Query选项卡中查询数据
在这里插入图片描述以上演示solr数据的上传及查询,这也表明solr可以动态添加数据。solr对于大型索引,优化需要一些时间才能完成,但是通过将许多小段文件合并为一个更大的文件,搜索性能将会提高。不建议一条一条添加数据,可以合并一次性并进行优化操作,对于搜索性能是好的。

四、solr 从数据库导入数据,全量索引和增量索引

此处内容主要参考博客:https://blog.csdn.net/u013378306/article/details/50761610及相关solr知识。
1.在docker或者宿主机中安装数据库
由于我是在云服务器CentOS7.2中测试的,服务器中安装有小皮面板(phpstudy linux),确实好用,必须给小皮打个广告,安装mysql那是一键安装并默认配置好,个性化配置也方便。
设置字段如下:在这里插入图片描述其中数据初始如下:在这里插入图片描述
2.更改solr配置文件/home/AnyQ/build/solr-4.10.3-anyq/example/solr/collection1/conf
/solrconfig.xml

新增如下代码:

 <!-- full-import & delta-import -->
    <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
         <lst name="defaults">
         <str name="config">data-config.xml</str>
         </lst>
    </requestHandler>
    <requestHandler name="/deltaimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
        <lst name="defaults">
            <str name="config">delta-data-config.xml</str>
        </lst>
    </requestHandler>

其中第一段是专门做全量索引的,第二段做增量索引(主要是靠DataImportHandler类实现)。
3.新增/home/AnyQ/build/solr-4.10.3-anyq/example/solr/collection1/conf/data-config.xml

<dataConfig>
    <dataSource name="jdbc" driver="com.mysql.jdbc.Driver"
        url="jdbc:mysql://localhost:3306/solr_faq?zeroDateTimeBehavior=convertToNull&amp;characterEncoding=utf8&amp;useUnicode=true"
        user="admin" password="25ff140a16466a4b"/>
    <document name="faq">
        <entity name="FAQ" pk="id"
                query="select * from faq limit ${dataimporter.request.length} offset ${dataimporter.request.offset}"
                transformer="RegexTransformer">
            <field column="id" name="id" />
            <field column="question" name="question" />
            <field column="answer" name="answer" />
            <field column="updata_time" name="updata_time" />
        </entity>
    </document>
</dataConfig>

其中solr_faq是库名,faq是表名。field 是列名,其中updata_time存储更新时间,如果有增删查改则更新updata_time值,随后增量索引会查询updata_time大于上一次更新的时间值进行更新,以此达到增量索引的目的,updata_time需要自己写代码维护。
4.新增/home/AnyQ/build/solr-4.10.3-anyq/example/solr/collection1/conf/delta-data-config.xml

 <dataConfig>
        <dataSource name="jdbc" driver="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost:3306/solr_faq?zeroDateTimeBehavior=convertToNull&amp;characterEncoding=utf8&amp;useUnicode=true"             user="admin" password="25ff140a16466a4b"/>
        <document name="faq">
            <entity name="FAQ" pk="id"
                    query="select * from faq"
                    deltaImportQuery="select * from faq where id='${dih.delta.id}'"
                    deltaQuery="select id from faq where updata_time > '${dih.last_index_time}'"
                    transformer="RegexTransformer">
                <field column="id" name="id" />
                <field column="question" name="question" />
                <field column="answer" name="answer" />
                <field column="updata_time" name="updata_time" />
            </entity>
        </document>
    </dataConfig>

5…修改/home/AnyQ/build/solr-4.10.3-anyq/example/solr/collection1/conf/schema.xml文件,定义field索引配置

#id这一项为anyq原本就有
 <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />

#下面三项为新增
  <field name="question" type="text_multi_lang" indexed="true" stored="true" required="true" multiValued="false"/>
  <field name="answer" type="string" indexed="false" stored="true" required="true" multiValued="false"/>
  <field name="updata_time" type="text_ansj" indexed="true" stored="true" required="false" multiValued="false" />

6.补充solr的war包缺少的部分jar包。
需要把mysql的mysql-connector-java-5.1.48-bin.jar,以及solr项目中/home/AnyQ/build/solr-4.10.3-anyq/dist目录下的jar包都放到solr的web站点中(路径为/home/AnyQ/build/solr-webapp/webapp/WEB-INF/lib)

五、测试全量及增量索引

1.启动solr服务
启动solr会自动读取配置文件,面板会出现Dataimport。

#在/home/AnyQ/build目录执行以下命令
cd build
#solr停止命令
[root@VM_0_14_centos build]$ sh solr_script/solr_deply.sh stop solr-4.10.3-anyq 8900
solr[8900] stop success!
#solr启动命令
[root@VM_0_14_centos build]$ sh solr_script/solr_deply.sh start solr-4.10.3-anyq 8900
nohup: appending output to 'nohup.out'
solr[8900] start success!

2.打开浏览器solr面板,全量索引。
在这里插入图片描述此时,点击Dataimport出现如下面板表示配置成功。在4框内输入参数将会对faq表中符合要求的数据全部导入索引,点击5框Execute执行,出现6框所示表明导入成功。
2.查询是否导入
在这里插入图片描述
如图,可以看到数据已经导入并且上方红框内的网址即是查询网址。
3.可以修改faq表中数据后,执行delta-import查看效果。此处不再演示。
4.与面板操作对应的网址是
全量:http://solr.xxxx.com:8900/solr/collection1/dataimport?command=full-import&commit=true&clean=false&offset=0&length=100000(其中0到100000的数据建立索引)

增量:http://solr.XXXX.com:8900/solr/collection1/deltaimport?command=delta-import&entity=FAQ
其中solr.xxxx.com代指部署solr服务的服务器的IP/域名。

最后

以上就是野性钻石为你收集整理的AnyQ如何配置solr动态读取数据库——AnyQ系列之二的全部内容,希望文章能够帮你解决AnyQ如何配置solr动态读取数据库——AnyQ系列之二所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部