给Solr添加自己的分词器,mmseg4j

2019-03-27 01:07|来源: 网路

1、下载mmseg4j-1.8.5

2、在Solr的web项目的lib文件夹中加入mmseg4j-all-1.8.5.jar包

3、在 solr的 schema.xml 中定义 field type如:

    <fieldType name="textComplex" class="solr.TextField" >
      <analyzer>
        <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="dic"/>
      </analyzer>
    </fieldType>
    <fieldType name="textMaxWord" class="solr.TextField" >
      <analyzer>
        <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word" dicPath="dic"/>
      </analyzer>
    </fieldType>
    <fieldType name="textSimple" class="solr.TextField" >
      <analyzer>
        <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="dic"/>
      </analyzer>
    </fieldType>

dicPath 指定词库位置(每个MMSegTokenizerFactory可以指定不同的目录,当是相对目录时,是相对 solr.home 的目录),dic要放在solr.home目录下,把mmseg4j-1.8.5\data下的文件全拷贝到dic目录,mode 指定分词模式(simple|complex|max-word,默认是max-word)。

如果不知道solr.home在哪里,可以打开项目

上图圈着的就看出来了,把dic字典文件放到该文件夹下,即我这里的dic目录是

E:\JAVA\MyEclipse 8.6\demo\multicore\core0\dic

4、测试,点击上图中看到的

 输入测试,用我们前面定义的分词器textComplex

5、实战开发中,还要自定义field

在 solr的 schema.xml 中定义自己的 fields如:

<field name="my_title" type="textComplex" indexed="true" stored="true" multiValued="true"/>
<field name="my_content" type="textComplex" indexed="true" stored="true" multiValued="true"/>

6、在开发java文件中应用

doc.addField("my_title", "this is test,my doc sys goto sc ood");
doc.addField("my_content", "我爱中国,中国人民爱我,天安门广场");

 


转自:http://www.cnblogs.com/llz5023/archive/2012/05/23/2515431

相关问答

更多
  • 你直接把这两个文件ctrl c 然后鼠标点击项目 再ctrl v 相当于拷贝到项目根目录 反正我是这样弄的 可以用
  • 1. 基本分词方式,速度快; 官方示例: List parse = BaseAnalysis.parse("让战士们过一个欢乐祥和的新春佳节。"); System.out.println(parse); result:[让/v, 战士/n, 们/k, 过/ug, 一个/m, 欢乐/a, 祥和/a, 的/uj, 新春/t, 佳节/n, 。/w] 2. 精准分词方式兼顾精度与速度,比较均衡; 官方示例: List parse = ToAnalysis.parse("让战士们过一个欢乐祥和的新春佳节。"); Sy ...
  • war复制到tomcat_dir/webapps/目录,并命名为solr.war。 2、将solr-4.7.1/example/lib/ext/目录下的jar文件复制到
  • 下面这篇文章是介绍如何在solr 4.9中配置solr自带的中文分词器的
  • 分词器的工作是将一串的文本切成 tokens,这些 token 一般是文本的子集。分析器的处理对象时一个字段,分词器则是面对一串文本,分词器读取一串文本,然后将其切割成一堆的 token 对象。 字符串中的空格或连接符会被删除。字符将被添加或者替换,如映射别名,或者缩写替换缩写为正常格式。分词器可能会产生出与原字段值不一致的token,或者长度与原始文本不一致。这个在token元数据用于文本字段高亮搜索结果时需要注意。
    lucene最新的版本是5.X,你这3.X版本太低 虽然我看不到你的图报的是什么错,但是感觉不像是版本问题,不过可以试下其他版本 我用的是lucene4.5
  • 要动态加载的首先基于机器学习的一些工具自然是不怎么容易上手了。当然也没那么容易入手。 至于几种常见的lucene切词工具 Paoding 评论0 0 0 加载更多
  • 我的方法是 内容传进来后,先用query进行分词,得到query后转成String,处理得到分词后的数组,遍历数组和域名,进行搜索。虽然比较麻烦,但是搜索出来的结果很好。