`

利用solr构建企业搜索平台(二)

    博客分类:
  • Solr
阅读更多

这篇文章,主要说的是 怎么在solr中加入中文分词,参考了一些文章,但是还是花了不少时间才搞出的。可能是大侠们太牛了,所以很多细节东西都没有写出来!但是要指出的是很多文章都是抄来抄去的!

入正题:
    在上面的一个文章中,已经使solr跑起来了,在上面的基础上,加入中文分词。我用的是paoding分词器!
1》请下好paoding分词器,下载地址:
http://code.google.com/p/paoding/downloads/list,在这里要非常感谢paoding作者:qieqie
在使用paoding的时候要注意:paoding的dic位置,也就是字典的位置,有两种办法解决:                    
1) 在系统环境变量中加入PAODING_DIC_HOME这个变量,值为paoding压缩包下面的dic的解压位置。
2)paoding-analysis.jar里面有个paoding-dic-home.properties文件,指定dic也可,但是要重新编译这个jar包,我采用的后面一种办法,只要每次固定好dic位置,部署还不是很不方便,设置环境变量我比较反感
2》建立文件

Java代码 复制代码
  1. package com.yeedoo.slor.tokenizer;   
  2.   
  3. import java.io.Reader;   
  4. import java.util.Map;   
  5.   
  6. import net.paoding.analysis.analyzer.PaodingTokenizer;   
  7. import net.paoding.analysis.analyzer.TokenCollector;   
  8. import net.paoding.analysis.analyzer.impl.MaxWordLengthTokenCollector;   
  9. import net.paoding.analysis.analyzer.impl.MostWordsTokenCollector;   
  10. import net.paoding.analysis.knife.PaodingMaker;   
  11.   
  12. import org.apache.lucene.analysis.TokenStream;   
  13. import org.apache.solr.analysis.BaseTokenizerFactory;   
  14.   
  15. public class ChineseTokenizerFactory extends BaseTokenizerFactory {   
  16.        
  17.     /**  
  18.      * 最多切分 默认模式  
  19.      */  
  20.     public static final String MOST_WORDS_MODE = "most-words";   
  21.   
  22.     /**  
  23.      * 按最大切分  
  24.      */  
  25.     public static final String MAX_WORD_LENGTH_MODE = "max-word-length";   
  26.   
  27.     private String mode = null;   
  28.   
  29.     public void setMode(String mode) {   
  30.         if (mode == null || MOST_WORDS_MODE.equalsIgnoreCase(mode) || "default".equalsIgnoreCase(mode)) {   
  31.             this.mode = MOST_WORDS_MODE;   
  32.         } else if (MAX_WORD_LENGTH_MODE.equalsIgnoreCase(mode)) {   
  33.             this.mode = MAX_WORD_LENGTH_MODE;   
  34.         } else {   
  35.             throw new IllegalArgumentException("不合法的分析器Mode参数设置:" + mode);   
  36.         }   
  37.     }   
  38.   
  39.     @Override  
  40.     public void init(Map<String,String> args) {   
  41.         super.init(args);   
  42.         setMode(args.get("mode").toString());   
  43.     }   
  44.   
  45.     public TokenStream create(Reader input) {   
  46.         return new PaodingTokenizer(input, PaodingMaker.make(), createTokenCollector());   
  47.     }   
  48.   
  49.     private TokenCollector createTokenCollector() {   
  50.         if (MOST_WORDS_MODE.equals(mode))   
  51.             return new MostWordsTokenCollector();   
  52.         if (MAX_WORD_LENGTH_MODE.equals(mode))   
  53.             return new MaxWordLengthTokenCollector();   
  54.         throw new Error("never happened");   
  55.     }   
  56.        
  57. }  
package com.yeedoo.slor.tokenizer;

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.TokenStream;
import org.apache.solr.analysis.BaseTokenizerFactory;

public class ChineseTokenizerFactory extends BaseTokenizerFactory {
	
	/**
	 * 最多切分 默认模式
	 */
	public static final String MOST_WORDS_MODE = "most-words";

	/**
	 * 按最大切分
	 */
	public static final String MAX_WORD_LENGTH_MODE = "max-word-length";

	private String mode = null;

	public void setMode(String mode) {
		if (mode == null || MOST_WORDS_MODE.equalsIgnoreCase(mode) || "default".equalsIgnoreCase(mode)) {
			this.mode = MOST_WORDS_MODE;
		} else if (MAX_WORD_LENGTH_MODE.equalsIgnoreCase(mode)) {
			this.mode = MAX_WORD_LENGTH_MODE;
		} else {
			throw new IllegalArgumentException("不合法的分析器Mode参数设置:" + mode);
		}
	}

	@Override
	public void init(Map<String,String> args) {
		super.init(args);
		setMode(args.get("mode").toString());
	}

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

	private TokenCollector createTokenCollector() {
		if (MOST_WORDS_MODE.equals(mode))
			return new MostWordsTokenCollector();
		if (MAX_WORD_LENGTH_MODE.equals(mode))
			return new MaxWordLengthTokenCollector();
		throw new Error("never happened");
	}
	
}


将该文件打包,如果你不愿打包,请到附件里面下吧。
请将两个jar,一个是这个,还有一个是 paoding-analysis.jar 放到tomcat的webapps\solr\WEB-INF\lib\下
3》更改schema.xml文件,使分词器起到作用。如果你看过前面一个文章,schema.xml的具体位置在c:\solr-tomcat\solr\conf\下面。
更改内容为:

Xml代码 复制代码
  1. <fieldType name="text" class="solr.TextField" positionIncrementGap="100">  
  2.       <analyzer type="index">  
  3.         <!--<tokenizer class="solr.WhitespaceTokenizerFactory"/>-->  
  4.         <tokenizer class="com.yeedoo.slor.tokenizer.ChineseTokenizerFactory" mode="most-words"/>  
  5.       ··· ···   
  6.       </analyzer>  
  7.       <analyzer type="query">  
  8.          <!--<tokenizer class="solr.WhitespaceTokenizerFactory"/>-->  
  9.          <tokenizer     class="com.yeedoo.slor.tokenizer.ChineseTokenizerFactory" mode="most-words"/>    
  10.         ··· ···   
  11.       </analyzer>  
  12. </fieldType>  
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <!--<tokenizer class="solr.WhitespaceTokenizerFactory"/>-->
        <tokenizer class="com.yeedoo.slor.tokenizer.ChineseTokenizerFactory" mode="most-words"/>
      ··· ···
      </analyzer>
      <analyzer type="query">
         <!--<tokenizer class="solr.WhitespaceTokenizerFactory"/>-->
         <tokenizer     class="com.yeedoo.slor.tokenizer.ChineseTokenizerFactory" mode="most-words"/> 
        ··· ···
      </analyzer>
</fieldType>


<!-- --> 里面的为需要更改的内容
4》重启你的tomcat ,ok!

附: [Solr分词顺序]Solr建立索引和对关键词进行查询都得对字串进行分词,在向索引库中添加全文检索类型的索引的时候,Solr会首先用空格进行分词,然后把分词结果依次使用指定的过滤器进行过滤,最后剩下的结果才会加入到索引库中以备查询。分词的顺序如下:
索引
1:空格whitespaceTokenize
2:过滤词StopFilter
3:拆字WordDelimiterFilter
4:小写过滤LowerCaseFilter
5:英文相近词EnglishPorterFilter
6:去除重复词RemoveDuplicatesTokenFilter
查询
1:查询相近词
2:过滤词
3:拆字
4:小写过滤
5:英文相近词
6:去除重复词
以上是针对英文,中文的除了空格,其他都类似

分享到:
评论

相关推荐

    SOLR搭建企业搜索平台

    本文将详细阐述如何利用SOLR搭建一个企业搜索平台,包括所需环境、配置步骤以及中文分词的设置。 一、SOLR搭建企业搜索平台 1. **运行环境** - **运行容器**:Tomcat 6.0.20 - **Solr版本**:apache-solr-1.4.0 ...

    利用Solr搭建你的搜索引擎

    标题中的“利用Solr搭建你的搜索引擎”意味着我们将探讨Apache Solr这一开源全文搜索平台的搭建过程。Solr是基于Lucene库的,提供了一个高效、可扩展的搜索和导航功能,广泛应用于各种企业的数据检索需求。 Solr的...

    solr 企业搜索引擎教程

    ### Apache Solr 企业搜索引擎教程知识点总结 #### 1. Apache Solr 概述 - **Solr**:Apache Solr 是一款高度可扩展且高性能的企业级搜索平台,由Apache软件基金会维护。它是一个开源搜索服务器,使用Java语言编写...

    基于Solr的企业级信息检索的设计与实现

    基于Solr构建企业级信息检索系统是一种可行且有效的解决方案。通过深入分析企业需求,精心设计系统架构,可以显著提升企业内部信息检索的效率和用户体验,助力企业提升核心竞争力。Solr的成熟技术和灵活特性使其成为...

    solr实现京东搜索

    本篇文章将详细阐述如何利用Solr实现京东搜索的功能。 一、关键词搜索 在商品信息搜索中,关键词搜索是最基础也最重要的功能。用户输入关键词后,Solr会通过分析器对关键词进行分词处理,然后在索引库中匹配与之...

    Apache Solr(solr-8.11.1.tgz)

    Apache Solr 是一个开源的全文搜索引擎,由Apache软件基金会维护,是Lucene项目的一部分。它提供了高效、可扩展的搜索和导航功能...熟悉这些知识点,可以帮助你更好地利用Apache Solr构建高性能的企业级搜索解决方案。

    solr(solr-9.0.0.tgz)

    总的来说,Solr-9.0.0是一个强大且灵活的搜索平台,适用于需要大量数据搜索和分析的场景,如电商网站的商品搜索、新闻网站的内容检索、企业内部的文档搜索等。通过深入理解和熟练使用Solr,你可以为你的应用程序提供...

    solr搜索引擎的使用介绍

    Solr搜索引擎的使用介绍 Solr,全称为Apache Solr,是Apache软件基金会的一个开源项目,基于Java开发,是一款...通过理解其核心概念、特性以及应用场景,我们可以充分利用Solr来提升系统的搜索性能,优化用户体验。

    solr资料以及问题汇总

    Solr是Apache软件基金会的一个开源项目,它是基于Java的全文搜索服务器,采用了Lucene库作为其...通过深入学习和实践这些内容,开发者可以掌握如何利用Solr构建高性能的全文搜索引擎,解决各种实际问题,提升系统性能。

    基于cdh5.7.5集群的solr(4.10.3-cdh5.7.5)+hbase(1.2.0-cdh5.7.5)构建二级索引方案

    通过引入Solr作为二级索引,我们可以利用Solr的全文搜索和多字段索引能力,实现对HBase数据的快速查询。 以下是构建二级索引的基本步骤: 1. **安装与配置**:在CDH集群中安装Solr和HBase,并进行相应的配置,确保...

    solr

    根据提供的信息,我们可以总结出以下关于Apache Solr的相关知识点: ### Apache Solr简介 Apache Solr是一款开源的、高性能的企业级...在Java开发环境下,利用Solr进行高效的搜索服务构建是完全可行且易于实现的。

    开源企业搜索引擎solr的应用教程

    《开源企业搜索引擎Solr的应用教程》 在当今信息爆炸的时代,高效、精准的搜索成为企业的核心竞争力之一。开源的企业搜索引擎Solr...通过深入学习和实践,开发者能够充分利用Solr的优势,为企业构建高性能的搜索应用。

    ES和solr搜索方案对比

    ES(ElasticSearch)和Solr都是基于Lucene的搜索引擎,它们各自提供了一套搜索框架,用于实现高效的全文搜索功能。由于两者都是在Apache License 2下开源的,因此在选择使用哪种搜索方案时,需要根据不同的使用场景...

    solr(solr-9.0.0-src.tgz)源码

    Solr是Apache软件基金会的一个开源项目,它是基于Java的全文搜索服务器,被广泛应用于企业级搜索引擎的构建。源码分析是深入理解一个软件系统工作原理的重要途径,对于Solr这样的复杂系统尤其如此。这里我们将围绕...

    solr导航搜索工具+文档+配置代码

    Solr,全称为Apache Solr,是一款开源的企业级全文搜索引擎,由Java编写,它提供了高效、可扩展的搜索和分析功能。在这个“solr导航搜索工具+文档+配置代码”压缩包中,包含了Solr的相关资源,可以帮助我们快速理解...

    solr自学详细教程,吐血总结

    【Solr自学详细教程,吐血总结】 在IT领域,特别是在大数据处理和信息检索中,Apache Solr扮演着至关重要的角色。...通过学习和实践,开发者可以掌握如何利用Solr构建高性能的站内搜索,提升用户的搜索体验。

    solr-4.10.3.rar

    Solr 是一个开源的企业级搜索平台,由Apache软件基金会维护,是Lucene项目的一部分。它提供了全文检索、命中高亮、拼写检查、缓存、近实时搜索等特性,广泛应用于网站内容搜索、电子商务产品搜索等领域。本次分享的...

    solr-7.7.2.zip

    Solr是中国Apache软件基金会开发的一款开源全文搜索引擎,它基于Java平台,可以实现高效、可扩展的搜索和分析功能。...通过深入理解和实践,可以进一步掌握如何利用Solr构建高性能的企业级搜索解决方案。

Global site tag (gtag.js) - Google Analytics