中文分词

中文的词和英文的单词完全不同。因为英文各个单词都是用空格分隔,而中文所有的字都连在一起。因此需要增加中文分词的功能,来让程序识别出各个词语,方便搜索。

举个例子:有一个网上书店,这个网上书店有一个搜索书的搜索框。用户在搜索框输入“司汤达的红与黑”,系统就应该识别出“司汤达”和”红与黑“,来找到相应的书。

本文使用了 solr6.3与MySQL结合使用的简明教程(四) 里面的表结构。中文分词功能,使用了一个开源的中文分词器Jcseg。项目的GitHub地址在 https://github.com/lionsoul2014/jcseg 。本文使用了2.1.0 Release 版本。

从GitHub上下载jcseg 2.1.0 Release 版本的源代码。确保你的电脑上已经安装java8,eclipse 和 Maven。本文不涉及这些文件的安装,请你自行学习如何安装这些软件。

把解压后得到的 jcseg 文件夹放到 eclipse 的工作空间里。确保jcseg文件夹里面没有 .git文件夹和.gitignore文件。我使用的是 eclipse Jave EE版。zip压缩包解压后得到的文件夹名称是jcseg-2.1.0-release。建议你改成jcseg,以便符合对项目名称的约定。打开 eclipse,File → import → Existing Maven Projects → next → Root Directory 选择 jcseg 文件夹 → Projects 全部选中,Add project(s) to working set 复选框也要选中 → 复选框下面的下拉列表选择jcseg → 点击Finish按钮。之后就可以成功导入了jcseg 项目。

为了使用 jcseg 分词器,我们需要编译源代码。鼠标选中项目jcseg,右键打开快捷菜单。快捷菜单中选择 Run As,子菜单中点击 Maven Build ... ,随即打开了Maven命令的对话框。在 Goals 文本框中输入clean package,点击Run按钮。等待编译完成后,进入子项目 jcseg-core 下的 target 文件夹,把 jcseg-core-2.1.0.jar 文件拷贝到 【solr安装目录】/example/example-DIH/solr/db4/lib/..路径下面。
在子项目 jcseg-analyzer 下面的 target 文件夹下,找到 jcseg-analyzer-2.1.0.jar 文件,拷贝到【solr安装目录】/example/example-DIH/solr/db4/lib/..路径下面。

用编辑软件打开 solrconfig.xml 文件。搜索”lib“字符串,找到下面的代码:

<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />

<lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-\d.*\.jar" />

<lib dir="${solr.install.dir:../../../..}/contrib/langid/lib/" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-langid-\d.*\.jar" />

<lib dir="${solr.install.dir:../../../..}/contrib/velocity/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-velocity-\d.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/example/example-DIH/solr/db4/lib/" regex="mysql-connector-java-5.1.40.jar" />

其中 mysql-connector-java-5.1.40.jar 那一个lib标签,是在上一篇教程 solr6.3与MySQL结合使用的简明教程(四) 中添加的。我们在上一篇教程的例子中继续做修改。紧接着上面的代码另起一行,加入 jcseg 两个 jar 包的路径:

<lib dir="${solr.install.dir:../../../..}/example/example-DIH/solr/db4/lib/" regex="jcseg-core-2.1.0.jar" />
<lib dir="${solr.install.dir:../../../..}/example/example-DIH/solr/db4/lib/" regex="jcseg-analyzer-2.1.0.jar" />

用编辑器打开 managed-schema 文件。加入新的fieldType标签。代码如下:

  <!-- 复杂模式分词: -->
<fieldtype name="textComplex" class="solr.TextField">
<analyzer>
<tokenizer class="org.lionsoul.jcseg.analyzer.JcsegTokenizerFactory" mode="complex"/>
</analyzer>
</fieldtype>
<!-- 简易模式分词: -->
<fieldtype name="textSimple" class="solr.TextField">
<analyzer>
<tokenizer class="org.lionsoul.jcseg.analyzer.JcsegTokenizerFactory" mode="simple"/>
</analyzer>
</fieldtype>
<!-- 检测模式分词: -->
<fieldtype name="textDetect" class="solr.TextField">
<analyzer>
<tokenizer class="org.lionsoul.jcseg.analyzer.JcsegTokenizerFactory" mode="detect"/>
</analyzer>
</fieldtype>
<!-- 检索模式分词: -->
<fieldtype name="textSearch" class="solr.TextField">
<analyzer>
<tokenizer class="org.lionsoul.jcseg.analyzer.JcsegTokenizerFactory" mode="search"/>
</analyzer>
</fieldtype>

因为要同时检索多个field: text 和 authorName,所以要用到 copyField 标签。copyField 标签的作用是把 authorName 的内容复制到 text 中。同时要保证 text 的属性 multiValued 等于 true。修改后的代码如下:

<field name="text" type="textSearch" indexed="true" stored="true" multiValued="true"/>
<copyField source="authorName" dest="text" />

db-data-config.xml 不需要做改动,直接用上一篇教程的就行。

访问URL http://localhost:8983/solr/db4/select?indent=on&q=司汤达写了红与黑&rows=44&wt=json

返回的数据如下:

{
"responseHeader":{
"status":0,
"QTime":2,
"params":{
"q":"司汤达写了红与黑",
"indent":"on",
"rows":"44",
"wt":"json"}
}
,
"response":{"numFound":1,"start":0,"docs":[
{
"id":"b13",
"isbn":"isbn13",
"name":"红与黑",
"text":["红与黑 isbn13",
"司汤达"]
,
"authorName":["司汤达"],
"_version_":1557285568502562816}]
}
}

系列教程

solr6.3与MySQL结合使用的简明教程(一)

solr6.3与MySQL结合使用的简明教程(二)

solr6.3与MySQL结合使用的简明教程(三)——SolrException: undefined field text错误如何解决

solr6.3与MySQL结合使用的简明教程(四)

solr6.3与MySQL结合使用的简明教程(五)——中文分词

更多相关文章

  1. MYSQL安装--小白教程
  2. mysql非安装包安装教程
  3. mysql 5.7.14 免安装配置方法教程
  4. MySQL5.7免安装版配置详细教程
  5. Win2012 R2 IIS8.5+PHP(FastCGI)+MySQL运行环境搭建教程
  6. 在sqlzoo上自学加入#10教程
  7. PHPMyWind教程:如何把本地测试好的程序发布到虚拟主机
  8. 【数据库管理工具】Navicat安装及使用教程
  9. 饿了么大前端 Node.js 进阶教程

随机推荐

  1. Django dumpdata无法序列化现有列
  2. mysql5.7.23免安装配置说明in win7
  3. MySQL是一个非常流行的小型关系型数据库
  4. mysql5.7 Access denied for user 'root'
  5. 分页检索大型ResultSet
  6. MYSQL SET类型字段的SQL查询某个字段保函
  7. C运行查询显示命令不同步?
  8. MySQL中如何插入blob类型数据
  9. mysql 排序两个字段/列表先根据时间升序
  10. 尝试删除sql中的重复记录,但查询进入无限