1. 程式人生 > >solr中ik分詞配置同義詞、停止詞、自定義詞庫

solr中ik分詞配置同義詞、停止詞、自定義詞庫

版本說明(不同版本配置可能不同):

solr : 5.0.0 

ik: IKAnalyzer2012FF_u2.jar

一、停止詞和自定義詞庫

 IKAnalyzer2012FF_u2.jar複製到solr-5.0.0/server/solr-webapp/webapp/WEB-INF/lib下

將ext.dic  IKAnalyzer.cfg.xml  stopword.dic 複製到solr-5.0.0/server/solr-webapp/webapp/WEB-INF/classes目錄下

IKAnalyzer.cfg.xml內容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
        <comment>IK Analyzer 擴充套件配置</comment>
        <!--使用者可以在這裡配置自己的擴充套件字典可多個檔案用;隔開 -->
        <entry key="ext_dict">ext.dic;</entry>

        <!--使用者可以在這裡配置自己的擴充套件停止詞字典可多個檔案用;隔開-->
        <entry key="ext_stopwords">stopword.dic;</entry>

</properties>
ext.dic內容(一個詞一行我這裡用12生效):
鼠
牛
虎
兔
龍
蛇
馬
羊
猴
雞
狗
豬

 stopword.dic(一個詞一行):

a
an
and
are
as
at
be
but
by
for
if
in
into
is
it
no
not
of
on
or
such
that
the
their
then
there
these
they
this
to
was
will
with
也
了
仍
從
以
使
則
卻
又
及
對
就
並
很
或
把
是
的
著
給
而
被
讓
在
還
比
等
當
與
於
但

二、同義詞

同義詞ik自己沒有實現需要自己實現

修改自己建立的core的schemal.xml檔案,新增如下內容:

 <fieldType name="text_ik" class="solr.TextField">
        <analyzer type="index">
            <tokenizer class="org.wltea.analyzer.lucene.IKAnalyzerSolrFactory" useSmart="true"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="org.wltea.analyzer.lucene.IKAnalyzerSolrFactory" useSmart="true"/>
            <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
        </analyzer>
    </fieldType>

再同目錄下新增synonyms.txt(同義詞直接用,隔開或用=>)如下:
cccfoo => cccbar cccbaz
fooaaa,baraaa,bazaaa

自己寫一個實現類IKAnalyzerSolrFactory,編譯成class,放入 IKAnalyzer2012FF_u2.jar包
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.AttributeSource.AttributeFactory;
  
public class IKAnalyzerSolrFactory extends TokenizerFactory{
      
    private boolean useSmart;
      
    public boolean useSmart() {
        return useSmart;
    }
      
    public void setUseSmart(boolean useSmart) {
        this.useSmart = useSmart;
    }
      
     public IKAnalyzerSolrFactory(Map<String,String> args) {
         super(args);
         this.setUseSmart(args.get("useSmart").toString().equals("true"));
       }
  
  
    @Override
    public Tokenizer create(AttributeFactory factory) {
        Tokenizer _IKTokenizer = new IKTokenizer(this.useSmart);
        return _IKTokenizer;
    }
  
}

將IKAnalyzerSolrFactory編譯好後,用解壓工具開啟IKAnalyzer2012FF_u2.jar,將編譯好的class檔案拖入到對應目錄下即可


重啟solr  重新構建core索引