实验环境
- jdk1.8.0_40 64位
- tomcat 7.0.76 64位
- solr-4.10.3
(如果是新版本的 solr 必须使用tomcat8+)
什么是solr
Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。
Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr根据xml文档添加、删除、更新索引 。Solr 搜索只需要发送 HTTP GET 请求,然后对 Solr 返回Xml、json等格式的查询结果进行解析,组织页面布局。Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。
安装
- 将solr-4.10.3\example\webapps 下的solr.war 包 放到tomcat/webapps 下解压为solr
- 将solr-4.10.3\example\lib\ext 下面的所有jar包 复制到tomcat 的solr/web-inf/lib 下面
- 将solr-4.10.3\example\resources 的log配置文件放到tomcat solr应用的WEB-INF/classes 下面 (没有的话新建一个)
- 配置solrhome目录
复制solr-4.10.3\example\solr 到 tomcat的solr下面 并改名为solrhome
配置web.xml 指定solrhome的目录
去掉该标签的注释
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>D:\apache-tomcat-7.0.76\webapps\solr\solrhome</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
配置IK分词器
- 导入IKjar包
- 导入配置文件IKAnalyzer.cfg.xml 到classes
- 配置schema.xml 添加如下代码
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
随便添加一个field 用于测试分词效果
<field name="item_title" type="text_ik" indexed="true" stored="true"/>
- 测试分词器
连接接数据库 导入数据
- 将solr-4.10.3\dist\solr-dataimporthandler-4.10.3.jar 和solr-dataimporthandler-extras-4.10.3.jar
复制到tomcat 的solr/web-inf/lib 下面 并导入数据库驱动
2.配置solrconfig.xml
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
在当前目录下建立data-config.xml
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
- 在当前目录下建立data-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/taotao?characterEncoding=UTF-8"
user="root"
password="root"/>
<document>
<entity name="id" query="select id, title, sell_point, price from tb_item">
<field column="id" name="id"/>
field column 对应的是数据库字段 name对应的域
<field column="title" name="item_title" />
<field column="sell_point" name="item_sell_point" />
<field column="price" name="item_price" />
</entity>
</document>
</dataConfig>
- schema.xml 配置域
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
<field name="item_title" type="text_ik" indexed="true" stored="true"/>
<field name="item_sell_point" type="text_ik" indexed="true" stored="true"/>
<field name="item_price" type="long" indexed="true" stored="true"/>
<field name="item_image" type="string" indexed="false" stored="true" />
<field name="item_category_name" type="string" indexed="true" stored="true" />
<field name="item_desc" type="text_ik" indexed="true" stored="false" />
<field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
<copyField source="item_title" dest="item_keywords"/>
<copyField source="item_sell_point" dest="item_keywords"/>
<copyField source="item_category_name" dest="item_keywords"/>
<copyField source="item_desc" dest="item_keywords"/>
- 导入数据