- <field name="id" type="string" indexed="true" stored="true" required="true" />
- <field name="ant_title" type="textComplex" indexed="true" stored="true" />
- <field name="ant_content" type="textComplex" indexed="true" stored="true" />
- <field name="all" type="textComplex" indexed="true" stored="false" multiValued="true"/>
- <field name="all" type="textComplex" indexed="true" stored="false" multiValued="true"/>
- <copyField source="ant_title" dest="all"/>
- <copyField source="ant_content" dest="all"/>
下面就来看一下中文分词吧,这里用的分词是IK Analyzer 2012。
中文分词
1 <!-- IKAnalyzer2012 --> 2 <fieldType name="text_ika" class="solr.TextField"> 3 <analyzer type="index" positionIncrementGap="100" autoGeneratePhraseQueries="true"> 4 <tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="false"/> 5 <!-- <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> --> 6 <!-- <filter class="solr.LowerCaseFilterFactory"/> --> 7 </analyzer> 8 <analyzer type="query"> 9 <tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="true" /> 10 <!-- <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> --> 11 <!-- <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> --> 12 <!-- <filter class="solr.LowerCaseFilterFactory"/> --> 13 </analyzer> 14 </fieldType>
分词用的依旧是fieldType,为的是在下面的field中能够用到。
有两个analyzer,一个是index,一个是query,index是针对于所有,query是针对于搜索。
可以看到我注掉了两个filter,为什么呢。
先说简单的吧,一个是query中的同义词Filter,solr.SynonymFilterFactory,注掉他是因为当前没有一个庞大的词库能够支撑中文如此复杂的同义词量。
另外一个是忽略大小写的Filter,这个Filter可以根据自己的需要进行添加或删除,在我们的系统中,主要处理中文,这个用处也不大。
还有一个注掉的Filter是停词Filter,这个用处挺大的,为什么注掉呢?因为我感觉他在这里不太合适。
解释一下:停词组件在中文分词中很重要,IK也提供了相对应的配置方法,不仅仅可以处理停词,而且还可以自定义词库。所以,我建议将停词在IK中配置而不是在schema.xml中。
两种方法都说一下:
第一种:在schema.xml中配置,不要注释stopword组件,并将停词文件拷贝至solrHome/core/conf目录下(注意文件的编码方式,至少保证文本文件是UTF-8格式,更加严格的,保证文本文件是无BOM格式的UTF-8编码)。
第二种:在IK配置文件中配置,请下载一个IK分词组件,里面会有一个IKAnalyzer.cfg.xml的配置文件,拷贝到solr项目的源代码根目录下,并将stopword.dic也拷贝到根目录下,如下图所示:
记得要导入IK的Jar包,这样,在你的文件中就可以使用IK提供的中文分词了。
给一个我用的stopword.dic,去下载。
IK也可以自定义词库,这个可以看一下IK的文档,很简单,将你的自定义词库的文件拷贝至根目录,并在IK配置文件中配置即可。
(注意IK Solr4.0配置)
这里特别的罗嗦几句,在Solr4.0发布以后,官方取消了BaseTokenizerFactory接口,而直接使用Lucene Analyzer标准接口。因此IK分词器2012 FF版本也取消了org.wltea.analyzer.solr.IKTokenizerFactory类。
4.1 solr4.0配置样例
使用IKAnalyzer的配置
<fieldType name="text" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>