第一步:创建core
core是solr的特有概念,每个core是一个查询数据,、索引等的集合体,你可以把它想象成一个独立数据库,我们创建一个新core:名字[core1]
进入linux命令行,进入到solr的bin目录,执行如下命令:
cd /usr/local/solr/bin
./solr create -c core1 -force // -c 指定要创建的Core名称 root用户启动需要增加 -force
第二步:准备数据导入配置
1、修改/usr/local/solr/server/solr/core1/conf 目录下的solrconfig.xml
增加内容如下:注意不要放到其他requestHandler里面,放在已经存在的</requestHandler> 节点后面!
<requestHandler name="/dataimport" class="solr.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> </requestHandler> |
requestHandler请求处理器,定义了索引和搜索的访问方式。
通过/dataimport进行数据导入,可以完成从MYSQL数据库导入数据到Solr的操作。
data-config.xml文件是自己制定的数据源描述文件,名字可以随便取。
2、/usr/local/solr/server/solr/core1/conf 目录下新建data-config.xml
<dataConfig> <dataSource name="sgk" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.1.112:3306/mydb" user="root" password="123" batchSize="-1" /> <document name="mydoc"> <entity name="product" query="SELECT pid,name,catalog_name,price,picture FROM products "> <field column="pid" name="id"/> <field column="name" name="product_name"/> <field column="catalog_name" name="product_catalog_name"/> <field column="price" name="product_price"/> <field column="picture" name="product_picture"/> </entity> </document> </dataConfig> |
2、修改/usr/local/solr/server/solr/core1/conf 目录下managed-schema文件中添加如下内容:
<field name="product_name" type="text_ik" indexed="true" stored="true"/> <field name="product_price" type="pfloat" indexed="true" stored="true"/> <field name="product_picture" type="string" indexed="false" stored="true" /> <field name="product_catalog_name" type="string" indexed="true" stored="true" /> <field name="product_keywords" type="text_ik" (string) indexed="true" stored="false" multiValued="true"/> <copyField source="product_name" dest="product_keywords"/> |
field配置参数说明:
l Name:域的名称
l Type:域的类型
l Indexed:是否索引
l Stored:是否存储
l multiValued:是否是多值,存储多个值时设置为true,solr允许一个Field存储多个值,比如存储一个用户的好友id(多个),商品的图片(多个,大图和小图)
copyField(复制域):
可以将多个Field复制到一个Field中,以便进行统一的检索。当创建索引时,solr服务器会自动的将源域的内容复制到目标域中。
l source:源域
l dest:目标域,搜索时,指定目标域为默认搜索域,可以提供查询效率。
第三步:安装中文分词
因为solr虽然内置中文分词,但效果并不好,我们需要添加IKAnalyzer中文分词引擎来查询中文。在https://github.com/EugenePig/ik-analyzer-solr5
1、下载IKAnalyzer for solr5的源码包,然后使用Maven编译,得到一个文件IKAnalyzer-5.0.jar,把它放入/usr/local/solr/server/solr-webapp/webapp/WEB-INF/lib目录中
2、修改managed-schema在最后加入以下内容:
<fieldType name="text_ik" class="solr.TextField"> <analyzer type="index" useSmart="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/> <analyzer type="query" useSmart="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType> |
第四步:上传相关类库
1、要导入mysql数据,需要MYSQL类库:
mysql-connector-java-bin.jar
2、导入数据需要 /usr/local/solr/dist目录下面的2个jar包
solr-dataimporthandler-7.2.1.jar
solr-dataimporthandler-extras-7.2.1.jar
3、上传3个jar包到 /usr/local/solr/server/solr-webapp/webapp/WEB-INF/lib目录中
4、重启solr
cd /usr/local/solr/bin
./solr restart -force //root用户启动需要增加 -force
第五步:添加更新配置文件
solr-6.6.0/server/solr下新建conf文件夹
在solr-6.6.0/server/solr/conf/conf下新建dataimport.properties文件
配置:
################################################# # # # dataimport scheduler properties # # # ################################################# # to sync or not to sync # 1 - active; anything else - inactive syncEnabled=1 # which cores to schedule # in a multi-core environment you can decide which cores you want syncronized # leave empty or comment it out if using single-core deployment #syncCores=game,resource syncCores=search_node # solr server name or IP address # [defaults to localhost if empty] server=localhost # solr server port # [defaults to 80 if empty] port=9090 interval=2 # application name/context # [defaults to current ServletContextListener's context (app) name] webapp=solr # URL params [mandatory] # remainder of URL params=/dataimport?command=delta-import&clean=false&commit=true # schedule interval # number of minutes between two runs # [defaults to 30 if empty] # 重做索引的时间间隔,单位分钟,默认7200,即5天; # 为空,为0,或者注释掉:表示永不重做索引 reBuildIndexInterval=7200 # 重做索引的参数 reBuildIndexParams=/dataimport?command=full-import&clean=true&commit=true # 重做索引时间间隔的计时开始时间,第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval*60*1000; # 两种格式:2012-04-11 03:10:00 或者 03:10:00,后一种会自动补全日期部分为服务启动时的日期 reBuildIndexBeginTime=03:10:00
如果不配置reBuildIndexBeginTime会导致报错, Unable to convert 'interval' to number 00:00:00
这个是源码中的bug,
if ((this.reBuildIndexBeginTime == null) || (this.reBuildIndexBeginTime.isEmpty())) this.interval = "00:00:00";
启动 solr-6.6.0/bin/solr start -port 9090
重启 solr-6.6.0/bin/solr restart -port 9090