有关官方配置的步骤,我已经在这篇文章里写了,连接是官方配置solr步骤(一)—solr下载及单节点的启动、配置说明
大家都知道,solr是首先要将数据建立出索引,而建立成的索引文件就存放到solrHome里,因为一个solr服务器因为需求,将来会生成很多个不同的数据源索引,因此,solrHome里又以core来分别存储不同数据源的索引以及相关数据源链接信息等等。
solrHome与core的关系是包含关系,即solrHome里包含多个core,core里边才有索引文件。
如果不知道solrHome如何配置,请参照搜索引擎solr系列—安装步骤
通过搜索引擎solr系列—安装步骤配置完成后,访问页面以下地方是无法打开的,如图:
补充一句:如果你能访问以上solr的首页面(有些版本不是admin.html,是index.html),说明你的solrHome是配置正确的。
通过这一段时间学习,感觉上,solr必须要创建core才能使用,否则,它无法去创建索引、增量索引、删除索引以及查询数据。
创建core的步骤大体如下:
- 拷贝core的配置文件。
- 配置数据库、引入数据库驱动包。
- 配置solr客户端,新建core。
具体步骤如下:
一、新建core文件夹
首先找到你的solrHome文件夹,solrHome的具体配置方法在搜索引擎solr系列—安装步骤文章中有说明,我的solrHome在D:\Tomcat9Solr\solrHome。
在该文件夹中创建一个core文件夹,名字随便起,不过,我觉得一个core可能是与一个数据库表对应,所以起名字与数据库表对应,这样更好区分,这个看个人喜好,比如我打算,要为数据库中的solr_test表建立索引,使用solr查询,那就在这里创建一个solrTest文件夹。
二、拷贝core的配置文件
将D:\Tomcat9Solr\solrHome\configsets\sample_techproducts_configs文件夹中的conf文件夹整个拷贝到上一步中新建的solrTest文件夹中。具体内容如下:
三、配置数据库,引入数据库驱动包。
1、打开上图中的solrconfig.xml文件,在该文件的config标签中添加如下内容:
<requestHandler name="/dataimport" class="solr.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
2、该段内容指定的是一个data-config.xml文件,这个文件是需要自己新建的,这里面就是配置数据库相关的连接,以及数据导入的字段、全量导入索引和增量导入索引等等,还有别的功能,我目前只知道这些。以下配置仅为全量索引导入配置。
在D:\Tomcat9Solr\solrHome\solrTest\conf文件中,新建一个data-config.xml,与solrconfig.xml文件同级。内容如下:
<dataConfig>
<!--dataSource标签配置数据库相关的信息-->
<dataSource name = "ds_1" type="JdbcDataSource"
driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@//192.168.1.155:1521/ZNXDDB"
user="old" password="old"/>
<document>
<!--以下的dataSource指定上边的dataSource标签中的name属性,并不是必须要加的,除非你配置了多个数据源,这里我是一个数据源,所以,下边的dataSource属性是可以去掉的,另外,pk属性指定的是manage-schema文件中的uniqueKey标签中的值,即主键-->
<entity name="SolrTest" dataSource="ds_1" PK="id"
query="SELECT id,username,yhbz FROM SOLR_TEST">
<!--以下的字段column属性对应数据库中字段名称,name是对应solr这边配置的名称,注意id,默认名称即为id,表示solr这边一条数据的主键,以下三个是要在solr这边中建立索引的字段,比如数据库中有10个字段,我只需要为3个字段建立索引关系,那这里就写3个就好了
如果数据库中的主键不是id,比如是objectId,那上边的query需要为它起一个别名为id即可-->
<field column="id" name="id" />
<field column="username" name="username" />
<field column="yhbz" name="yhbz" />
</entity>
</document>
</dataConfig>
对以上配置的解释及注意点:
solr对于索引的建立,有两种,全量索引和增量索引。
全量索引,是将数据库中所有的要建立索引的数据,重新全部建立一遍,对于大量数据来说,这肯定特别消耗时间的一种事。
增量索引,是将数据库中那些新增数据建立起索引,加入到solr查询中。以上我的配置,只是用于全量索引,关于增量索引,有些注意点,我将在下一篇文章中单独说一下我遇到的坑。
3.因为上边的数据库是用的oracle数据库,因此需要引入oracle数据库驱动包,我是用的是ojdbc6-11.2.0.4.0-atlassian-hosted.jar
这个驱动包,大家可以从网上找一个,将该包放入D:\Tomcat9Solr\webapps\solr\WEB-INF\lib中,如图所示:
四、配置managed-schema.xml(早期版本叫schema.xml)文件
1.该文件配置的内容为solr索引中引入字段的类型设置,与data-config.xml中配置的field标签内容是对应的。在data-config.xml同级目录中找到managed-schema.xml文件打开,添加如下配置:
<!-- name属性为引入字段在solr中的名称。
type表示类型,solr中会有很多类型,这个在managed-schema中你会看到很多的fieldType标签,都是solr中的类型,具体可以百度看具体的作用。
indexed我理解的表示是建立索引,true为建立,如果为false,则该字段不能作为条件查询出来,如果不小心设置为false,改正后需要重建索引,特别注意这个。
stored true表示在solr中显示,如果这里设置为false,将会在solr中查询不到。
multiValued false表示关联查询字段,这个我不太理解。请再看别人的吧。-->
<field name="username" type="string" indexed="true" stored="true" multiValued="false"/>
<field name="yhbz" type="string" indexed="true" stored="true" multiValued="false"/>
关于以上配置的解释:
在managed-schema文件中,已经默认配置了很多可能配置的字段,包括id,如下边的代码块中的配置,所以这里不需要再配置id的内容,因为id为默认的,已经配置了id的相关配置,只需要再增加以上两个即可。
2.在managed-schema中你还会找到如下两行的标签
<!--请注意,能设为uniqueKey的字段,必须要有required="true"的属性-->
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<!--请注意,能设为uniqueKey的字段,必须要有required="true"的属性-->
<uniqueKey>id</uniqueKey>
这个表示solr中的主键,一般与数据中的主键对应,默认为这个名字。
五、solr客户端配置core,建立索引
1.配置好前边的步骤,重启tomcat,(下边图中有不重启的方法),访问solr的客户端,我的是http://192.168.1.170:8983/solr/admin.html ,找到如下图的位置:
2.在如图add core面板中,添加core,name和instanceDir都命名为solrTest(与前边配置中在solrHome文件夹中建立的solrTest文件夹名称一致),直接点下边的add core即可,就会发现下边多出一个solrTest的core。
3.如上图,点开core selector,选择solrTest,即会有如下的列表出现。然后如图所示执行全量索引导入操作。
4.如果你的数据量很小,你点击execute后,过一会,点击Refresh Status,会出现如下图的提示
5.这样的情况,就表示你已经导入成功了。然后再点击左侧面板中的Query,直接点击下边的Execute Query即可。右侧就会查询到数据。即表示导入成功。
以上即为配置全量导入的core创建过程。其实我觉得solr的core创建好傻,又要复制文件夹,复制配置文件,改好配置,然后再到solr客户端上配置上,这也太繁琐了,但是后来我想了想觉得也有道理,因为毕竟数据库的配置不是想加就加的,加这么多防备,就是让你在后台配置好了,客户端才能创建core,建立索引等等,更加安全一些。下一篇会写增量导入以及它关于不同数据库注意的地方。