首页 > 代码库 > solr的同义词实现

solr的同义词实现

solr同义词的具体实现

1.修改分词器的jar包技术分享 并重新打包

   在org.wltea.analyzer.lucene包下新增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);
  }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.修改配置文件schema.xml

不需要同义词的配置

<!--增加分词器 -->
<fieldType name="text_ik" class="solr.TextField" >
  <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>

修改为同义词的配置

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

 

修改synonyms.txt文件加入需要的同义词

技术分享

 

如果同义词不生效,则需要下面的配置

在tomcat下的solr项目

技术分享

 

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的配置不分词的词语

技术分享

 

最后的运行效果如下:

技术分享

 

solr的同义词实现