solr环境介绍
- solr5.5
- java1.7
- mysql
- zookeeper
solr这里使用的是solr5.5,因为该版本仍然支持jdk1.7适用性较广,但是该方法也能用在solr6.0上。 通过该方法我们会搭建一个可以从数据库导入数据的solr环境。
单机环境
首先我们解压下载到的solr压缩包
solr目录结构如下
加入依赖jar包
首先我们向dist目录中放入我们需要依赖的外部jar包,这里我们使用的是mysql数据库所以我们需要加入mysql的driver,mysql-connector-java-5.1.6.jar这个包可以去网上找一下很常见。
设定core配置文件
首先我们要建立自己的core配置文件,拷贝\solr-5.5.2\server\solr\configsets\data_driven_schema_configs文件夹到\solr-5.5.2\server\solr\,并将其改名为SolrTest,该配置文件将作为我们core配置文件的模板。下面还要对它稍作修改。
加入DataImportHandler
在新建立的SolrTest文件夹的\conf\solrconfig.xml文件中搜索<requestHandler name="/select"我们可以看到如下内容
<requestHandler name="/select" class="solr.SearchHandler">
<!-- default values for query parameters can be specified, these
will be overridden by parameters in the request
-->
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
<!-- <str name="df">text</str> -->
</lst>
我们在它的上面加入DataImportHandler
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
要使上面的DataImportHandler生效我们还要在配置文件中引入相关jar包,此外为了从数据库导入数据还要引入数据库驱动jar包。 在新建立的SolrTest文件夹的\conf\solrconfig.xml文件中搜索<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-\d.*\.jar" />可以看到如下内容
<lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-\d.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/contrib/clustering/lib/" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-clustering-\d.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/contrib/langid/lib/" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-langid-\d.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/contrib/velocity/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-velocity-\d.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="mysql-connector-java-5.1.6.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />
其中新加入了solr-dataimporthandler和mysql-connector-java-5.1.6.jar,他们分别是数据导入与数据库驱动的相关jar包。
数据导入配置
我们的solr环境是需要从数据库导入数据,为了实现这一功能我们还要进行一些配置。
实验数据表
上面的DataImportHandler配置中我们设定了配置文件文件名为data-config.xml。因此我们要在SolrTest/conf目录下新建data-config.xml, 内容如下
<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
<dataSource name="source1" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/solrtest" user="root" password="root" batchSize="-1" />
<document>
<entity name="testdata" pk="id" dataSource="source1"
query="select * from testdata"
deltaImportQuery="select * from testdata where id='${dih.delta.id}'"
deltaQuery="select id from testdata where ts> '${dataimporter.last_index_time}'">
<field column="id" name="id"/>
<field column="name" name="name"/>
<field column="age" name="age"/>
<field column="ts" name="ts"/>
</entity>
</document>
</dataConfig>
其中deltaQuery是增量查询,通过该语句查询新增的条目。然后根据deltaImportQuery指定的SQL语句返回所有这些ID的数据,即为这次增量导入所要处理的数据。“${dih.delta.id}”和 “${dataimporter.last_index_time}”为内置变量,分别为索引id和索引时间。
managed-schema配置field信息
然后我们要打开SolrTest/conf/managed-schema文件,搜索<field name="id" 在这些field标签下加入我们数据表对应column的设置,如下
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="_version_" type="long" indexed="true" stored="true"/>
<field name="_root_" type="string" indexed="true" stored="false"/>
<field name="_text_" type="text_general" indexed="true" stored="false" multiValued="true"/>
<field name="name" type="string" indexed="true" stored="true" />
<field name="age" type="int" indexed="true" stored="false" />
<field name="ts" type="date" indexed="true" stored="true" />
<copyField source="*" dest="_text_"/>
说明:这里加入了name、age、ts几项,其中id一项使用默认的就好,它满足了我的设置要求。 field 标签带有很多配置,其中:
- name: 表示域的名称,是强制必须有的属性
- type: 域类型的名称,与 fieldType 元素的 name 属性值对应,也是强制必须有的属性,不可省略
- indexed: true 即表示需要对该域进行索引,一般如果你需要在该域上进行查询或排序时,则需要配置为 true, 默认值为 false
- stored: 表示是否需要把域值存储到硬盘上,方便你后续查询时能再次提取出来原样显示给用户
- docValues: 表示此域是否需要添加一个 docValues 域,这对 facet 查询, group 分组,排序, function 查询有好处,尽管这个属性不是必须的,但他能加快索引数据加载,对 NRT 近实时搜索比较友好,且更节省内存,但它也有一些限制,比如当前 docValues 域只支持 strField,UUIDField,Trie*Field 等域,且要求域的域值是单值不能是多值域
- multiValued: 表示这个域是否可以存储多个值,若设置为 true, 即表示这是一个多值域
- omitNorms: 此属性若设置为 true ,即表示将忽略域值的长度标准化,忽略在索引过程中对当前域的权重设置,且会节省内存。只有全文本域或者你需要在索引创建过程中设置域的权重时才需要把这个值设为 false, 对于基本数据类型且不分词的域如 intFeild,longField,StrField 等默认此属性值就是 true, 否则默认就是 false.
- termVectors: 设置为 true 即表示需要为该 field 存储项向量信息,当你需要 MoreLikeThis 功能时,则需要将此属性值设为 true ,这样会带来一些性能提升。
- termPositions: 是否存储 Term 的起始位置信息,这会增大索引的体积,但高亮功能需要依赖此项设置,否则无法高亮
- termOffsets: 表示是否存储索引的位置偏移量,高亮功能需要此项配置,当你使用 SpanQuery 时,此项配置会影响匹配的结果集
复制域即表示把某个域的值复制到一个目标域上面,那如果把多个域的值复制到一个目标域上面呢,你可以进行多次复制,体现到 XML 配置上就是类似这样的配置:
<copyField source="title" dest="text"/>
<copyField source="body" dest="text"/>
建立core
配置文件修改完了我们准备建立自己的core
首先运行solr solr-5.5.2/bin/solr start -p 8983
浏览器访问http://localhost:8985/solr,选择Core Admin如下
确认后索引建成了,准备导入数据
点击Dataimport
执行一下query的查询 数据已经导入进来了
集群环境搭建
集群环境与单机环境最大的不同就是配置文件位于zookeeper,整个集群的配置由zookeeper进行管理。
首先还是按单机的步骤改写配置文件。
向zookeeper上传配置文件
配置文件改写完成后,执行solr-5.5.2/server/scripts/cloud-scripts/zkcli.sh脚本,命令如下
./zkcli.sh -zkhost localhost:2181 -cmd upconfig -confdir /usr/local/src/solr-5.5.2/server/solr/SolrTest/conf/ -confname SolrTest
其中 localhost:2181 为我搭建的zookeeper服务地址, /usr/local/src/solr-5.5.2/server/solr/SolrTest/conf/为我们修改的配置文件地址,SolrTest为core配置的配置名
执行该命令后我们会在zookeeper上见到
确实有SolrTest的节点了。
启动两个solr
solr-5.5.2/bin/solr -c -z localhost:2181 -p 8983
solr-5.5.2/bin/solr -c -z localhost:2181 -p 8984
说明 solr命令的-c参数代表could集群,-z代表使用外部zookeeper -p 代表监听的端口。
建立集群core
首先浏览器访问http://localhost:8983/solr,选择Core Admin如下
首先浏览器访问http://localhost:8984/solr,选择Core Admin如下
说明: 这里因为资源有限,我在一台机器上启动了两个solr实例,在建立core的过程中有这么几个参数
- name就是core的名称
- instanceDir就是core的本地目录,这里对应了/usr/local/src/solr-5.5.2/server/solr/solrcloud1
- dataDir代表会在solrcloud1目录下建立数据文件夹data
- config与schema代表配置文件的名称
- collection比较重要,这里只能填写zookeeper有的配置,这里只能填写我上面上传的的SolrTest
- shard是分片的名称
集群建立好了
导入数据和单机一个套路,不贴图了
来源:oschina
链接:https://my.oschina.net/u/2455415/blog/743179