`

Solr 4.10.2整合IKAnalyzer 2012FF_hf1 智能分析与细粒度分析配置useSmart

阅读更多
1.solr分词的主要配置文件之一: schema.xml,添加IKAnalyzer 2012FF_hf1分词配置方式一如下:
 <fieldType name="text_cn" class="solr.TextField">
  <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer" />
  </fieldType>

2.将IKAnalyzer2012FF_u1.jar放到%SOLR_HOME%/example/solr-webapp/webapp/WEB-INF/lib下。
3.cd %SOLR_HOME%/example/执行:
java -jar start.jar
4.访问:http://localhost:8983/solr
选择coreName:collection1 -->Analysis,Analyse Fieldname / FieldType:这里选择我们定义的text_cn,接着执行中文分词测试:




5.由分词结果可知,IKAnalyzer的默认分词模式为细粒度分词,但有的时候我们想要却是智能分词。此版本去除了之前提供的IKTokenizerFactory,故此重新实现,让其支持智能分词。
实现代码如下:

package org.wltea.analyzer.lucene;

import java.io.Reader;
import java.util.Map;

import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.analysis.util.TokenizerFactory;
import org.apache.lucene.util.AttributeFactory;

public class IKTokenizerFactory extends TokenizerFactory{
 private final boolean useSmart;
 public IKTokenizerFactory(Map<String, String> args) {
  super(args);
  this.useSmart = getBoolean(args, "useSmart", false);
 
 }

 @Override
 public Tokenizer create(AttributeFactory factory, Reader in) {
  return new IKTokenizer(in,this.useSmart);
 }

}

6.将此类打包到IKAnalyzer2012FF_u1.jar中,接下来修改schema.xml,添加第二种IKAnalyzer 2012FF_hf1分词配置方式,使其支持智能分词(useSmart用来制定是否使用智能分词):
<fieldType name="text_cn" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
  <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
  <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
    </fieldType>

7.重新启动solr,进行分词测试:



可以看到index采用的为默认的细粒度分词,query采用的为智能分词.
到此,简单的solr中文分词server搭建完毕,接下来准备使用spring-data-solr构建搜索,索引创建,更新,高亮等后续操作,且听下回忽悠。。。。



  • 大小: 325.3 KB
  • 大小: 252.6 KB
分享到:
评论
3 楼 hvang1988 2015-12-03  
shoringchow 写道
刚才的图没有弄好,如下索引中虽然有”九阳豆浆机DJ13B-D600SG“这个商品,但使用“豆浆机DJ13B”搜索的时候搜索不到,主要是因为IK分词分割拉丁字母和阿拉伯数字的时候会保留原字符串,我如何将原字符串剔除出分词后的结果中?谢谢!


九阳豆浆机DJ13B
“九阳豆浆机DJ13B”
solr搜索时,用不分词的字段来搜 用field copy

*九阳豆浆机DJ13B*
2 楼 shoringchow 2015-04-27  
刚才的图没有弄好,如下索引中虽然有”九阳豆浆机DJ13B-D600SG“这个商品,但使用“豆浆机DJ13B”搜索的时候搜索不到,主要是因为IK分词分割拉丁字母和阿拉伯数字的时候会保留原字符串,我如何将原字符串剔除出分词后的结果中?谢谢!
1 楼 shoringchow 2015-04-27  
楼主你好,我也使用IK分词,但是目前遇到一个无解的问题,如下:
,索引中虽然有这个商品,但搜索的时候搜索不到,主要因为IK分词分割拉丁字母和阿拉伯数字的时候会保留原字符串,我如何将原字符串剔除出分词后的结果中?谢谢!

相关推荐

Global site tag (gtag.js) - Google Analytics