`

关于Solr1.4和paoding分词器整合的一个需要注意的问题

阅读更多

今天有人说在Solr1.4里使用paoding2.0.4(可能是终结版了),无法实现正常的高亮显示。这个问题说难不难,说简单也不简单,我上次配置的时候,也花了一点时间测试,才找对合适的参数。今天既然有人问起来,我干脆在这里简单写一下,免得以后忘记。

 

闲话少叙,开始干活。

 

在Solr1.4出来之前,Paoding就已经停止开发了,所以Paoding分词器没有考虑与Solr1.4整合的功能,值得庆幸的是在网上,有前辈已经给我们铺了一条比较平坦的路了,具体讲,就是Bory.Chan前辈给我们封装了一个工厂类,通过使用这个工厂类,就可以比较简单地实现Solr1.4和paoding的友好相处。这个工厂类的源码我就不贴了,贴个地址,表示对前辈的尊重:http://blog.chenlb.com/2009/12/solr-1-4-with-paoding.html

下载这个工厂类,编译。

 

然后再修改solr/conf/schemal.xml文件,在其中找到这一段:

    <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>

        <!-- in this example, we will only use synonyms at query time
        <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
        -->
        <!-- Case insensitive stop word removal.
          add enablePositionIncrements=true in both the index and query
          analyzers to leave a 'gap' for more accurate phrase queries.
        -->
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumb
ers="1" catenateAll="0" splitOnCaseChange="1"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>

        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumb
ers="0" catenateAll="0" splitOnCaseChange="1"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
      </analyzer>
    </fieldType>

 

 

改成如下:

    <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="com.chenlb.solr.paoding.PaodingTokenizerFactory" />

        <!-- in this example, we will only use synonyms at query time
        <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
        -->
        <!-- Case insensitive stop word removal.
          add enablePositionIncrements=true in both the index and query
          analyzers to leave a 'gap' for more accurate phrase queries.
        -->
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumb
ers="1" catenateAll="0" splitOnCaseChange="1"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="com.chenlb.solr.paoding.PaodingTokenizerFactory" mode="max-word-length"/>
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumb
ers="0" catenateAll="0" splitOnCaseChange="1"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
      </analyzer>
    </fieldType>

 要注意的是,Bory.Chan给的例子是在“index”配置中,设置mode="max-word-length",而在“query”则不设置,经过我实际测试,发现这两个参数位置互换一下才能达到比较好的效果。

另外,这个工厂类只支持“max-word-length”和“非max-word-length”两种模式,而“max-word-length”这个单词容易写错了,所以我改造了一下PaodingTokenizerFactory,把这个参数设置成一个boolean型的参数。

 

 

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

import net.paoding.analysis.analyzer.PaodingTokenizer;
import net.paoding.analysis.analyzer.TokenCollector;
import net.paoding.analysis.analyzer.impl.MaxWordLengthTokenCollector;
import net.paoding.analysis.analyzer.impl.MostWordsTokenCollector;
import net.paoding.analysis.knife.PaodingMaker;

import org.apache.lucene.analysis.Tokenizer;
import org.apache.solr.analysis.BaseTokenizerFactory;

import cn.com.pansky.otp3.lucene.analyzer.paoding.SolrPaodingTokenizer;

/**
 * 基于Paoding分词器的分词工厂
 * @author http://blog.chenlb.com/
 * @Modified by BrokenStone 2010-08-03
 *
 */
public class PaodingTokenizerFactory extends BaseTokenizerFactory {

        public static final String MOST_WORDS_MODE = "most-words";            //最多切分 默认模式
        public static final String MAX_WORD_LENGTH_MODE = "max-word-length";  //按最大切分

        private boolean isMaxWordLength = false;     //是否采用“按最大切分”模式分词,默认是按“最多切分”模式分词
        public boolean isMaxWordLength() {
                return isMaxWordLength;
        }

        public void setMaxWordLength(boolean isMaxWordLength) {
                this.isMaxWordLength = isMaxWordLength;
        }


        public Tokenizer create(Reader input) {
                return new SolrPaodingTokenizer(input, PaodingMaker.make(),
                                createTokenCollector());
        }

        private TokenCollector createTokenCollector() {
                if(isMaxWordLength)
                        return new MaxWordLengthTokenCollector();
                else
                        return new MostWordsTokenCollector();
        }
}

 

分享到:
评论

相关推荐

    Solr3.2 + Paoding中文分词的搜索引擎

    Solr3.2 + Paoding中文分词的搜索引擎是一个针对中文文档进行高效检索的解决方案,结合了Apache Solr 3.2版本与Paoding分词器的优势。Apache Solr是基于Lucene的开源搜索服务器,提供了更高级别的API和配置选项,而...

    Solr 1.4 Enterprise Search Server.pdf

    Solr 1.4 是一个功能强大的企业级搜索引擎平台,它基于Apache Lucene(一个高性能全文检索库)构建而成。Solr 1.4 版本在2009年由Packt Publishing出版的一本书中被详细介绍,该书由David Smiley和Eric Pugh共同编写...

    支持solr5.5 solr6.0中IK分词需要的资料

    Solr是中国最流行的全文搜索引擎框架Apache Lucene的一个扩展,它提供了高级的搜索功能,并且能够进行复杂的全文检索、分布式搜索和处理大量数据。在Solr中,分词器(Tokenizer)是文本分析的重要组成部分,它负责将...

    Window下Solr1.4安装部署

    ### Window下Solr1.4安装部署的知识点详解 #### 一、Solr简介 Apache Solr 是一个高性能、基于Lucene的全文检索服务。它提供了丰富的功能集,包括高度可扩展性、易于部署和强大的搜索功能。Solr 1.4版本是在2009年...

    支持 Solr7 的 ik 分词器

    在本案例中,我们关注的是`ik-analyzer-solr7`,这是一个专门为 Apache Solr 7 版本定制的 ik 分词器实现。 Apache Solr 是一个流行的开源全文搜索服务器,它提供了强大的搜索功能和丰富的数据分析能力。Solr 7 ...

    solr1.4教程

    《Solr1.4教程》全面解析 在信息化飞速发展的今天,企业对高效、精准的搜索需求日益增强。Solr作为一款开源的企业级搜索引擎,因其强大的功能和易用性,逐渐成为众多企业的首选。本教程将深入探讨Solr1.4版本,帮助...

    solr 5.x 和 6.x 最新中文分词器

    Solr是Apache Lucene项目的一个子项目,是一个高性能、全文本搜索服务器,广泛应用于企业级搜索引擎搭建。在Solr 5.x和6.x版本中,中文分词器扮演着至关重要的角色,它负责将中文文本拆分成有意义的词汇,便于索引和...

    兼容solr4.10.2的ik-mmseg4j-paoding分词器

    能兼容solr-4.10.2的分词器,大礼包全放送.包括IK分词器,mmseg4j分词器,庖丁分词器.都是经本人测试可用,其中mmseg4j与庖丁都是下载源码,修改重编译并测试生成的.希望大家喜欢.至于与solr的整合方式,网上很多,这里就不...

    solr7 的 ik分词器

    Solr7的IK分词器是针对中文文本检索的一个重要工具,它在全文检索领域扮演着关键角色。IK Analyzer是一款开源的、适用于Java环境的中文分词组件,专为提高中文信息处理的效率和准确性而设计。在Solr7版本中,IK分词...

    solr ik分词器

    "Solr6.3 IK分词器"就是这样一个工具,专为处理中文文本而设计,它被集成到Solr中以优化对中文内容的处理。 IK分词器,全称为"Intelligent Chinese Analyzer",由Java编写,是Solr和Elasticsearch中的一个流行中文...

    针对Solr6.6.0的IK分词器

    Solr6.6.0中的IK分词器是用于对中文文本进行精细化分词的工具,它是基于Apache Lucene的开源搜索引擎项目Solr的一个插件。这个插件的主要任务是将中文句子分解成一系列有意义的词语,以便于索引和搜索。在Solr中,...

    paoding 分词

    paoding广泛应用于搜索引擎、推荐系统、信息检索、文本挖掘等领域,对于需要处理大量中文文本的系统,如社交媒体分析、新闻聚合等,paoding是一个理想的解决方案。 **二、环境搭建** 1. **JDK安装** 首先确保你...

    solr4.3的IK分词器

    最新版solr4.3的IK分词器,中文分词效果良好!对付一般的大众分词没有问题

    solr-4.10.3+ik分词器

    在标题“solr-4.10.3+ik分词器”中,我们看到的是Solr的一个具体版本——4.10.3,以及与之配合使用的IK分词器。这个版本的Solr包含了多项优化和改进,例如更稳定的性能、增强的搜索特性以及对各种数据源的更好支持。...

    IK分词solr5.0.0

    在Solr 5.0.0中使用IK分词器,可以显著提高中文文本的检索效果,通过智能分词和新词识别,使得用户输入的关键词能够更准确地匹配到文档中的内容。同时,通过调整分词器的配置,还能进一步优化搜索体验,满足不同的...

    solr7.3.1中文分词器

    描述中提到的"solr7.3.1种需要的中文IK分词器",IK(Intelligent Chinese Analyzer)分词器是一个强大的、成熟的中文分词组件,广泛应用于各种Java开发的搜索系统中。IK分词器支持多种分词模式,包括精确模式、全...

    solr(中文分词器)集群

    一个Solr集群是由多个独立的Solr实例组成,它们通过Zookeeper进行协调和管理。Zookeeper是一个分布式的协调服务,用于处理集群中的配置管理、节点发现和一致性问题。在Solr集群中,每个Solr实例被称为一个"SolrCore...

    solr6.0中IK分词需要的资料

    Solr6.0是Apache Solr的一个版本,它是一个开源的全文搜索引擎,广泛应用于各种文本检索场景。在Solr中,分词器是处理输入文本...记住,优化分词器的过程是一个持续迭代的过程,需要根据用户的反馈和检索效果不断调整。

Global site tag (gtag.js) - Google Analytics