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

23 篇文章 2 订阅
4 篇文章 0 订阅

中文分词

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

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

本文使用了 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结合使用的简明教程(五)——中文分词

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值