solr学习1:solr单机模式下为MySQL建立索引

solr入门的第一篇博客,从最简单的开始。

lz使用的solr5.5。从solr5开始,部署分为单机模式和集群(云)模式。单机模式的启动很简单:

solr start

默认的端口是8983,启动后就可以访问管理页面了:http://192.168.3.176:8983/solr。

现在来讲如何为MySQL创建索引。

1. 创建core

solr1

直接创建会报错误:

org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: 
Could not load conf for core mysql_core: Error loading solr config from solr-5.5.0/server/solr/mysql_instance/conf/solrconfig.xml

要手动创建错误信息中的目录,并且将solr-5.5.0/server/solr/configsets/basic_configs/conf下的配置文件拷贝到该目录中。

2. 为MySQL建索引

在MySQL上建个测试表,里面有175条数据

id brand_id brand_name
1 117 AC Schnitzer
2 251 Arash
3 34 阿尔法罗密欧

使用brand_name字段为索引,能通过模糊搜索匹配记录。

(1)配置数据源

修改solrconfig.xml

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

新建db-data-config.xml

<dataConfig>
	<dataSource driver="com.mysql.jdcb.Driver" url="jdbc:mysql://192.168.3.156:3306/news" user="root" passwor d="pxene" batchSize="-1" />
	<document>
		<entity name="brand" query="SELECT id, brand_id, brand_name FROM t_brand">
			<field column="id" name="id" />
			<field column="brand_id" name="brandId" />
			<field column="brand_name" name="brandName "/>
		</entity>
	</document> 
</dataConfig>

这个配置有三点需要注意:

a. 对于数据量大的表,要将batchSize设置为-1(默认是500,设置为-1是Integer.MIN_VALUE)

b. field上的name属性与schema(一会介绍)中的field的name要一致

c. 必须有一个field的name设置为id

(2)添加依赖包

修改solrconfig.xml

<lib dir="${solr.install.dir}/lib/" regex=".*\.jar" />

并且在solr-5.5.0/server/solr/mysql_instance/lib下添加以下jar:

solr-dataimporthandler-5.5.0.jar
solr-dataimporthandler-extras-5.5.0.jar
mysql-connector-java-5.1.24.jar

(3)设置schema

solr在5.0版本以下使用schema.xml管理schema,重新设置都要重启solr。在5.0版本以上使用schema API管理schema,重新设置不用重启solr。

使用post请求来添加field:

solr2

对于field有这几种操作:add-field/delete-field/replace-field(solr wiki

然后可以用下面的url查询下field是否添加成功:

http://192.168.3.176:8983/solr/mysql_core/schema/fields

field的属性:

name:field的名称,唯一。

type:field的类型,默认的fieldType有string/boolean/int/float/long/double/…等等。fieldType是可以自定义的,也是通过schema API。

indexed:是否将该field进行索引。

stored:是否存储该field,无用的字段最后不要存储。

required:该field是否可以为空。

multiValued:该field是否唯一。

lz为brand_id和brand_name两个字段添加索引,name为brandId和brandName。

(4)检查能否连接

solr3

选中mysql_core,点击Dataimport查看是否已连接。如果没有连接上的话,点击Logging查看日志(如果是缺少html文件,可在solr-5.5.0/example/example-DIH/solr/solr/conf下找到)。如果没报错,那就重启solr试试。

(5)导入数据

solr4

Command有两个选项:full-import全量导入,会覆盖原有的索引;delta-import增量导入,会在原有索引的基础上追加。

verbose:这个选项设为true的话,会打印导入的一些中间过程的详细信息,有利于调试以及了解内部操作细节

clean:表示是否在导入数据创建索引之前先清空掉原有的索引

commit:表示是否立即提交索引

optimize:表示是否优化索引

debug:表示是否开启调试模式

选中在db-data-config.xml设置的entity name,点击Execute便导入了。

(6)查询

solr5

q:查询条件,:左侧是属性名;:右侧是属性值,可使用通配符*。例如:brandName:*众*

sort:排序条件,格式为属性名 asc|desc

start:从第几行开始,rows:一次显示多少行,numFound:满足查询条件的记录总数。这三个参数可以实现分页查询。

 

2 Replies to “solr学习1:solr单机模式下为MySQL建立索引”

发表评论