论坛首页 Java企业应用论坛

发布IKAnalyzer中文分词器V3.1.5GA

浏览 13014 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-11-08  
果然solr1.4的接口发生了微妙的变化
0 请登录后投票
   发表时间:2009-11-08  
看来LZ对汉语有研究,像汉语这种分析语,汉语组词是非常灵活,远远超过印欧语言。但是解析复杂度也增加了。
0 请登录后投票
   发表时间:2009-11-08  
IK3.1.6已经成功支持solr1.4,请使用下面的配置文件:
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
			<analyzer type="index">
				<tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory14" isMaxWordLength="false"/>
				<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
				<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" />
				<filter class="solr.LowerCaseFilterFactory" />
				<filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt" />
				<filter class="solr.RemoveDuplicatesTokenFilterFactory" />
			</analyzer>
			<analyzer type="query">
				<tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory14" isMaxWordLength="false"/>
				<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />
				<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
				<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" />
				<filter class="solr.LowerCaseFilterFactory" />
				<filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt" />
				<filter class="solr.RemoveDuplicatesTokenFilterFactory" />
			</analyzer>
		</fieldType>

或者
<fieldType name="text" class="solr.TextField">
			<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
		</fieldType>


如果你使用的solr1.3,请使用下面的配置:
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
			<analyzer type="index">
				<tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="false"/>
				<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
				<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" />
				<filter class="solr.LowerCaseFilterFactory" />
				<filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt" />
				<filter class="solr.RemoveDuplicatesTokenFilterFactory" />
			</analyzer>
			<analyzer type="query">
				<tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="false"/>
				<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />
				<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
				<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" />
				<filter class="solr.LowerCaseFilterFactory" />
				<filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt" />
				<filter class="solr.RemoveDuplicatesTokenFilterFactory" />
			</analyzer>
		</fieldType>

或者
<fieldType name="text" class="solr.TextField">
			<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
		</fieldType>


至于两者的不同之处,请细心的网友们,仔细观察,  
飘过~~~~~~~
0 请登录后投票
   发表时间:2009-11-08   最后修改:2009-11-08
jbas 写道
linliangyi2007 ,你好,
  我是按你文档中的写的,应该不会错的,这个问题应该是lucene-core-2.9.1修改了TokenStream 结构导致的,别的中文分词也有这个问题,但有些已经支持最新2.9.1, 请你这边再看一下了。
谢谢!

当我执行:http://localhost:8983/solr/db/select/?q=title%3A%22%E4%BA%92%E8%81%94%E7%BD%91%22&version=2.2&start=0&rows=10&indent=on 这个url 查询后,显示如下错误:

HTTP ERROR: 500
org.wltea.analyzer.solr.IKTokenizerFactory.create(Ljava/io/Reader;)Lorg/apache/lucene/analysis/Tokenizer;

java.lang.AbstractMethodError: org.wltea.analyzer.solr.IKTokenizerFactory.create(Ljava/io/Reader;)Lorg/apache/lucene/analysis/Tokenizer;
at org.apache.solr.analysis.TokenizerChain.getStream(TokenizerChain.java:69)
at org.apache.solr.analysis.SolrAnalyzer.reusableTokenStream(SolrAnalyzer.java:74)
at org.apache.solr.schema.IndexSchema$SolrIndexAnalyzer.reusableTokenStream(IndexSchema.java:364)
at org.apache.lucene.queryParser.QueryParser.getFieldQuery(QueryParser.java:567)

。。。



您反馈的问题已经解决,原因是由于solr1.4修改了TokenizerFactory接口,与lucene2.9无关。新的IK3.1.6版本地址http://linliangyi2007.iteye.com/blog/512577

关于Lucene2.9,它的分词器接口做了新的设计,但仍然与旧接口兼容。我们会等待lucene3.0分布后,接口确定了,再跟进发布IK3.5版本的。

再次感谢您的反馈!

0 请登录后投票
   发表时间:2009-11-10  
jbas 写道
老大,你的lucene是什么版本了?为什么我的是lucene-core-2.9.1中报错:
org.wltea.analyzer.solr.IKTokenizerFactory.create(Ljava/io/Reader;)Lorg/apache/lucene/analysis/Tokenizer;

java.lang.AbstractMethodError: org.wltea.analyzer.solr.IKTokenizerFactory.create(Ljava/io/Reader;)Lorg/apache/lucene/analysis/Tokenizer;

是不支持
    public TokenStream create(Reader reader) { 
        return new IKAnalyzer().tokenStream("text", reader); 
    } 
     
这种写法。

IK用的Lucene版本好像是2.4的 而2.9的版本修改了一些属性 可能导致了这个错误
0 请登录后投票
   发表时间:2009-11-10  
shijiyu1984 写道
jbas 写道
老大,你的lucene是什么版本了?为什么我的是lucene-core-2.9.1中报错:
org.wltea.analyzer.solr.IKTokenizerFactory.create(Ljava/io/Reader;)Lorg/apache/lucene/analysis/Tokenizer;

java.lang.AbstractMethodError: org.wltea.analyzer.solr.IKTokenizerFactory.create(Ljava/io/Reader;)Lorg/apache/lucene/analysis/Tokenizer;

是不支持
    public TokenStream create(Reader reader) { 
        return new IKAnalyzer().tokenStream("text", reader); 
    } 
     
这种写法。

IK用的Lucene版本好像是2.4的 而2.9的版本修改了一些属性 可能导致了这个错误


跟lucene的版本无关,2.9虽然改了分词器接口,但依然向下兼容2.4的接口。

问题已经找到,是solr1.4的TokenizerFactory接口变化造成的,在IK3.1.6中已经支持solr1.4了。
0 请登录后投票
   发表时间:2009-11-10  
CharacterHelper.isCJKCharacter(char input)这个方法判断的中文好像只对GB2312的编码的汉字有用 对有些GBK的汉字判断好像不适用
0 请登录后投票
   发表时间:2009-11-10  
上次在Solr1.4中将自定义字典加大 字典文件7M左右 出现加载字典内存溢出问题 设置Tomcat的虚拟内存都没有能够解决 最后采取的办法是将你加载字典的结构给修改了
0 请登录后投票
   发表时间:2009-11-10  
不知道你有什么好的解决方法?
0 请登录后投票
   发表时间:2009-11-10  
shijiyu1984 写道
上次在Solr1.4中将自定义字典加大 字典文件7M左右 出现加载字典内存溢出问题 设置Tomcat的虚拟内存都没有能够解决 最后采取的办法是将你加载字典的结构给修改了


你使用API加载的嘛还是配置文件?能说说改了哪些东西吗?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics