当前位置: 代码迷 >> MySQL >> Solr之筹建Solr5.2.1服务并从Mysql上导入数据
  详细解决方案

Solr之筹建Solr5.2.1服务并从Mysql上导入数据

热度:80   发布时间:2016-05-05 16:57:38.0
Solr之搭建Solr5.2.1服务并从Mysql上导入数据

一、开启Solr服务

1、首先从solr官网下载solr-5.2.1.tgz包,解压之后为solr-5.2.1。

2、读取README.txt可知通过bin/solr start命令开启solr服务,当然可以将solr-5.2.1/bin加入环境变量里面。此时开启的服务是放在jetty下的服务,也可以放在Tomcat下,只是感觉那样挺麻烦,还需要再下载一个Tomcat包。

3、开启服务之后,默认是开启8983端口,此时就可以使用localhost:8983/solr/进行访问了;如果不能访问,通过java -version查看你的java版本,看是否低于java1.7,如果低于,请升级。其实,在README.txt文件里面,Instructions for Building Apache Solr from Source下面的一行,已经明确指出要下载哪些东西。

二、从Mysql数据库中导入数据

1、创建core或collection,有两种方式创建
第一种是使用命令行,查看README.txt所知道的
bin/solr create -c collection
第二种使用访问链接创建
localhost:8983/solr/admin/cores?action=CREATE&name=collection&instanceDir=collection
默认创建的目录在solr-5.2.1/server/solr下

2、修改solr-5.2.1/server/solr/collection/conf/managed-schema文件为schema.xml
前面进入conf文件夹一看,傻了,居然没有4.6.1里面的schema.xml文件,这怎么设置?后来看到别人的一个文件说可以设置,难道我去4.6.1复制一个过来,再仔细一看有个managed-schema文件,于是试着打开一看,看到了下面的内容:
This is the Solr schema file. This file should be named “schema.xml” and should be in the conf directory under the solr home(i.e. ./solr/conf/schema.xml by default)

3、在schema.xml添加filed,因为我的mysql数据库当中只有id和name两个字段,而name这个filed在schema.xml已经存在,我只需要添加id就行了,如下:

   <fields>        <field name="id" type="int" indexed="true" stored="true" required="true" />    </fields>    <uniqueKey>id</uniqueKey>    <defaultSearchField>name</defaultSearchField>

4、修改solr-5.2.1/server/solr/collection/conf/下的solrconfig.xml的配置文件,配置一下添加数据库数据的xml,如下:

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

5、创建solrconfig.xml文件中的data-config.xml文件,内部主要配置了访问数据库的用户名、密码,以及对应的数据库的字段,文件内容如下:

<dataConfig>    <dataSource type="JdbcDataSource"    driver="com.mysql.jdbc.Driver"    url="jdbc:mysql://localhost/database_name"    user="userName"    password="passWord"/>    <document>        <entity name="check_lawyer"            query="select id, name from tableName">            <field column="id" name="id" />            <field column="name" name="name" />        </entity>    </document></dataConfig>

注:上面的database_name是你创建的数据库名,userName是数据库用户名,passWord是数据库密码,tableName是你的表名,field区域当中的column对应数据库中的列,而name就是solr中显示的名称。

6、将solr-dataimporthandler-5.2.1.jarsolr-5.2.1/dist/文件夹下copy到solr-5.2.1/server/solr-webapp/webapp/WEB-INF/lib当中,此java包是导入数据用的。

8、从mysql官网中下载一个mysql-connector-java-5.1.35.zip压缩包,解压出一个mysql-connector-java-5.1.35-bin.jar包,将它copy到solr-5.2.1/server/lib下。

9、重启服务bin/solr restart,在在浏览器中输入:localhost:8983/solr/dataimport?command=full-import 来完成全量数据导入,在每次全量数据导入执行的时候,原有索引会被删除,如果不想删除原有索引,可以运行如下命令:localhost:8983/solr/dataimport?command=full-import&clean=false

10、若是不用步骤9的方法,也可以通过选择当前的core为collection,然后点击Dataimport,如果上面配置好的话,command下拉框就会有个full-import选择,选择它,然后点击下面的蓝色按钮Execute,等几分钟,刷新之后,出现Indexing completed. Added/Updated: 1963 documents. Deleted 0 documents. (Duration: 01s)类似的字段,说明导入mysql成功,此时就可以进行查询了

11、localhost:8983/solr/collection/select?q=%E6%98%A5&wt=json&indent=true输入这个链接就查询到结果了

三、相关错误:

1、如下,说明在schema.xml重复定义了id,把它屏蔽掉,重启服务
collection: org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: Could not load conf for core collection: [schema.xml] Duplicate field definition for ‘id’ [[[id{type=string,properties=indexed,stored,omitNorms,omitTermFreqAndPositions,sortMissingLast,required, required=true}]]] and [[[id{type=int,properties=indexed,stored,omitNorms,omitTermFreqAndPositions,required, required=true}]]]. Schema file is /Users/user/lcg/Web/solrServer/solr-5.2.1/server/solr/collection/conf/schema.xml

2、如下,说明没有在schema.xml文件中定义name字段
collection: org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: Could not load conf for core collection: default search field ‘name’ not defined or not indexed. Schema file is /Users/user/lcg/Web/solrServer/solr-5.2.1/server/solr/collection/conf/schema.xml

3、<field name="name" type="string" indexed="true" stored="true">后面少了个/,应该为<field name="name" type="string" indexed="true" stored="true"/>,修改完之后,重启服务
collection: org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: Could not load conf for core collection: org.xml.sax.SAXParseException; systemId: solrres:/schema.xml; lineNumber: 1028; columnNumber: 12; 元素类型 “field” 的结束标记必须以 ‘>’ 分隔符结束。. Schema file is /Users/user/lcg/Web/solrServer/solr-5.2.1/server/solr/collection/conf/schema.xml

四、参考:

http://www.csdn123.com/html/itweb/20130726/23894_23889_23891.htm

http://tbwuming.iteye.com/blog/1152333

http://ju.outofmemory.cn/entry/19792

http://blog.csdn.net/hbuxzy/article/details/9254071

版权声明:本文为博主原创文章,未经博主允许不得转载。

  相关解决方案