solr 4.8+mysql数据库数据导入 + mmseg4j中文全文索引 配置笔记
转载请标明出处:http://www.cnblogs.com/chlde/p/3768733.html
1.如何将solr部署,请参考之前的文章
2.按上述配置好后,在solr_home文件夹中,将包含collection1文件夹,这就是solr的一个实例。下面我们来看看collection1中的文件内容。
collection1中包含conf和data两个子文件夹。data中包含tlog和index(如果没有也没关系,稍后再solr建立索引时,将会被创建)。tlog是记录日志的文件夹,index是存放索引的文件夹。conf中包含lang文件夹和若干文件。lang文件夹中包含的是词库文件,但是solr默认是没有中文词库的,所以之后会将中文词库加入该文件夹中。在conf中,包含了若干xml文件,我们针对solr配置,是需要配置solrconfig.xml和schema.xml即可。下面我们讲一下如何配置这两个文件。
3.先配置solrconfig.xml。solrconfig.xml是solr的核心文件。这里包含了jar包引用,数据库读取路径配置,操作接口配置。
jar包配置如下
<lib dir="../contrib/extraction/lib" regex=".*\.jar" />
<lib dir="../dist/" regex="solr-cell-\d.*\.jar" /> <lib dir="../contrib/clustering/lib/" regex=".*\.jar" />
<lib dir="../dist/" regex="solr-clustering-\d.*\.jar" /> <lib dir="../contrib/langid/lib/" regex=".*\.jar" />
<lib dir="../dist/" regex="solr-langid-\d.*\.jar" /> <lib dir="../contrib/velocity/lib" regex=".*\.jar" />
<lib dir="../dist/" regex="solr-velocity-\d.*\.jar" /> <lib dir="../contrib/dataimporthandler/lib" regex=".*\.jar" />
<lib dir="../dist/" regex="solr-dataimporthandler-\d.*\.jar" />
其中,最后两行是数据导入的handler,这包含了从数据库读取数据所需要的jar包。这些jar的目录都在solr_home\contrib这个文件夹中。
配置dataimporthandler
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
这里需要你创建一个新的xml文件,放在conf文件夹中,命名为data-config.xml。内容如下
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/yourDBname"
user="root"
password="root"/>
<document>
<entity name="question1" query="select Guid,title,QuesBody,QuesParse,QuesType from question1 where Guid is not null">
<field column="Guid" name="id"/>
<field column="title" name="question1_title"/>
<field column="QuesBody" name="question1_body"/>
<field column="QuesParse" name="question1_parse"/>
<field column="QuesType" name="question1_type"/>
</entity>
<entity name="question2" query="select Guid,title,QuesBody,QuesParse,QuesType from question2 where Guid is not null">
<field column="Guid" name="id"/>
<field column="title" name="question2_title"/>
<field column="QuesBody" name="question2_body"/>
<field column="QuesParse" name="question2_parse"/>
<field column="QuesType" name="question2_type"/>
</entity>
</document>
</dataConfig>
如上,包含了datasource和document两个大标签。datasource正如其名,包含了数据库的配置信息。document包含了entity。entity就是一个从数据库读取数据的动作。
query就是读取数据所用的sql,field是数据库中的字段与schma中的字段进行匹配的列表。稍后在schma.xml的介绍中,将会详细说明。
我们回到solrconfig.xml中,requestHandler这里定义了相应http请求的接口。如之前配置的name为/dataimport接口,在中间件启动后,访问http://localhost:8080/solr/collection1/dataimport即可查看数据导入的状态。若执行命令,便可执行http://localhost:8080/solr/collection1/dataimport?command=full-import 即可(这句的含义是全部重新索引,之前的索引将被删除),其他命令,请参考http://www.cnblogs.com/llz5023/archive/2012/11/15/2772154.html。同理,通过相同的形式,即可实现对solr的增删改查。这里还能对requestHandler进行一些高级配置,感兴趣的同学可以到apache-solr-ref-guide-4.8中阅读。
4.schma.xml配置。schma.xml完成了对索引数据的类型配置和索引一些相关动作的配置(如分词方法配置)。
solr需要为每条索引定义一个id作为主键,而且在查询中必须要有字段与主键id进行对应,否则将会报错。如在data-config中的Guid与id进行匹配,将guid作为主键。
field为solr索引的基本类型,type的值与fieldType对应,即通过type为每个field指定一个fieldType,而fieldType将为field规定如何进行索引。
例如,我们将用mmseg4j对中文进行索引
<!-- Chinese -->
<fieldType name="text_chn_complex" class="solr.TextField" >
<analyzer>
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="lang/chn.txt"/>
</analyzer>
</fieldType>
<fieldType name="text_chn_maxword" class="solr.TextField" >
<analyzer>
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word" dicPath="lang/chn.txt"/>
</analyzer>
</fieldType>
<fieldType name="text_chn_simple" class="solr.TextField" >
<analyzer>
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="lang/chn.txt"/>
</analyzer>
</fieldType>
如上,我们定义了三个fieldType,这三个表示了对中文进行索引的三种方式。都属于solr.TextField类。analyzer均为mmseg4j,只是使用的mode不同。dicPath即为词库所在位置。
<field name="question1_type" type="text_chn_maxword" indexed="true" stored="true"/>
这里定义了一个名为question1_type的field,使用text_chn_maxword方式进行索引。
这里有一点是要注意的,solr中是没有and的,所以,要在多个字段查询匹配的关键字,要使用到copyField这个类型。
例如
<field name="question2_title" type="text_chn_maxword" indexed="true" stored="true"/>
<field name="question2_body" type="text_chn_maxword" indexed="true" stored="true"/> <field name="question2_text" type="text_chn_maxword" indexed="true" stored="true" multiValued="true"/>
<copyField source="question2_title" dest="question2_text"/>
<copyField source="question2_body" dest="question2_text"/>
这里就是将question2_title和question2_body共同索引到question2_text中,这样只要question2_title或question2_body任意被关键字匹配,就会将question2_text返回。注意question2_text的multiValued="true",这点是必须的。
5.遇到的问题
中文词库下载
http://download.labs.sogou.com/dl/sogoulabdown/SogouW/SogouW.zip
mmseg4j需要使用2.0以上版本,2.0一下在solr4.8中会有bug
https://code.google.com/p/mmseg4j/
JAVA工程师:chlde2500@gmail.com
solr 4.8+mysql数据库数据导入 + mmseg4j中文全文索引 配置笔记的更多相关文章
- 三、Navicat将远程MySql数据库数据导入本地
1.安装本地的MySql.记住用户名和密码,这里以root,root为例. 2.打开Navicat,新建连接(连接),输入连接名,用户名,密码.确定,连接测试.这里连接名为luzhanshi.这样本地 ...
- 在Linux环境下,将Solr部署到tomcat7中,导入Mysql数据库数据, 定时更新索引
什么是solr solr是基于Lucene的全文搜索服务器,对Lucene进行了扩展优化. 准备工作 首先,去下载以下软件包: JDK8:jdk-8u60-linux-x64.tar.gz TOMCA ...
- mysql数据库数据(字段数过大)太多导入不了的解决方法
mysql数据库数据(字段数过大)太多导入不了的决方法: 1.打开navicat 工具 2.在数据库上右键,执行右键菜单命令“命令列界面” 3.在打开的窗口中,运行set global max_all ...
- linux mysql 数据库操作导入导出 数据表导出导入
linux mysql 数据库操作导入导出 数据表导出导入 1,数据库导入 mysql -uroot -p show databases; create database newdb; use 数据库 ...
- 从Mysql数据库中导入导出表结构
1.从Mysql数据库中导入sql表 很简单,只需要一个命令即可搞定:[root@localhost ~]# mysql -uroot -piweb_xxx_mysql iweb < modif ...
- 利用Java进行MySql数据库的导入和导出
利用Java来进行Mysql数据库的导入和导出的总体思想是通过Java来调用命令窗口执行相应的命令. MySql导出数据库的命令如下: mysqldump -uusername -ppassword ...
- 使用pentaho工具将数据库数据导入导出为Excel
写在前面:本篇博客讲述的是如何使用pentaho工具快速的将数据库数据导出为Excel文件,以及如何将Excel文件数据导入数据库. 补充:使用此工具并不需要任何一句代码并能快速便捷解决实际问题,此工 ...
- 使用pandas把mysql的数据导入MongoDB。
使用pandas把mysql的数据导入MongoDB. 首先说下我的需求,我需要把mysql的70万条数据导入到mongodb并去重, 同时在第二列加入一个url字段,字段的值和第三列的值一样,代码如 ...
- MySQL数据库的导入方法
问题 如何导入MySQL数据库 解决方案 1. 概述MySQL数据库的导入,有两种方法:1) 先导出数据库SQL脚本,再导入:2) 直接拷贝数据库目录和文件. 在不同操作系统或MySQL版本情况下,直 ...
随机推荐
- scrapy-redis让redis不止使用db0
废话不多说,直接在 custom_settings 设置即可 代码: class MySpider(RedisSpider): """Spider that reads ...
- [MySQL优化案例]系列 — 分页优化
通常,我们会采用ORDER BY LIMIT start, offset 的方式来进行分页查询.例如下面这个SQL: SELECT * FROM `t1` WHERE ftype=1 ORDER BY ...
- Linux 中, 安装html转pdf工具:wkhtmltopdf
wkhtmltopdf下载地址官网:https://wkhtmltopdf.org/downloads.html 进入到/opt文件夹下面,新建文件夹wkhtmltopdf,然后把下载好的wkhtml ...
- 编写App测试用例的关注点
如何做到测试用例的百分百覆盖一直是测试用例编写过程中的难点,首先在测试时我们经常会遇见一些常见的bug,那么我们可以在编写测试用例时考虑到这些点. 一:关于业务逻辑 ...
- 0709关于mysql优化思路【何登成】
转自 http://isky000.com/database/mysql-performance-tuning-sql 优化目标 减少 IO 次数IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所 ...
- MySQL架构优化实战系列3:定时计划任务与表分区
原创 2016-07-08 汤抗 DBAplus社群 一 定时计划任务 1.概论 mysql计划任务可以定时更新数据库表或者做大文件的汇总表. 2.配置 开启计划任务 SHOW VARIABL ...
- MySQL 面试题目
1, mysql的复制原理以及流程. (1)先问基本原理流程,3个线程以及之间的关联. (2)再问一致性,延时性,数据恢复. (3)再问各种工作遇到的复制bug的解决方法 2,mysql中myis ...
- POJ 1696
这题是明显的TU包变形. 使用卷包裹法可解,而且是必定可以经过所有点的.直观可知,当经过某点后,相当于把之前的点抹去,求剩下点的TU包,递归下去,也就能把点全部经过了. 于是,只需把经过的点标记一下就 ...
- Struts简单介绍
一.在介绍struts之前,先来了解一下什么是MVC框架吧. 1.MVC介绍 MVC全名是Model View Controller.是模型(model)-视图(view)-控制器(controlle ...
- 什么是鸭子类型(duck typing)
"当看到一仅仅鸟走起来像鸭子.游泳起来像鸭子.叫起来也像鸭子,那么这仅仅鸟就能够被称为鸭子." 我们并不关心对象是什么类型,究竟是不是鸭子,仅仅关心行为. 比方在python中.有 ...