solr入门的第一篇博客,从最简单的开始。
lz使用的solr5.5。从solr5开始,部署分为单机模式和集群(云)模式。单机模式的启动很简单:
solr start
默认的端口是8983,启动后就可以访问管理页面了:http://192.168.3.176:8983/solr。
现在来讲如何为MySQL创建索引。
1. 创建core
直接创建会报错误:
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:
1 2 3 |
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:
对于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)检查能否连接
选中mysql_core,点击Dataimport查看是否已连接。如果没有连接上的话,点击Logging查看日志(如果是缺少html文件,可在solr-5.5.0/example/example-DIH/solr/solr/conf下找到)。如果没报错,那就重启solr试试。
(5)导入数据
Command有两个选项:full-import全量导入,会覆盖原有的索引;delta-import增量导入,会在原有索引的基础上追加。
verbose:这个选项设为true的话,会打印导入的一些中间过程的详细信息,有利于调试以及了解内部操作细节
clean:表示是否在导入数据创建索引之前先清空掉原有的索引
commit:表示是否立即提交索引
optimize:表示是否优化索引
debug:表示是否开启调试模式
选中在db-data-config.xml设置的entity name,点击Execute便导入了。
(6)查询
q:查询条件,:左侧是属性名;:右侧是属性值,可使用通配符*。例如:brandName:*众*
sort:排序条件,格式为属性名 asc|desc
start:从第几行开始,rows:一次显示多少行,numFound:满足查询条件的记录总数。这三个参数可以实现分页查询。
楼下是疯子。哈哈