`

利用SOLR搭建企业搜索平台 之二(中文分词)[转]

阅读更多

关键字: solr lucene 搭建 中文分词 http://www.dzxiaoshuo.com

http://www.dzxiaoshuo.com

这篇文章,主要说的是 怎么在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搭建一个企业搜索平台,包括所需环境、配置步骤以及中文分词的设置。 一、SOLR搭建企业搜索平台 1. **运行环境** - **运行容器**:Tomcat 6.0.20 - **Solr版本**:apache-solr-1.4.0 ...

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

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

    solr搜索引擎的使用介绍

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

    solr-7.7.2.zip

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

    solr搜索入门文档 原理-搭建-使用细节

    二、Solr搭建 1. 安装Solr:首先从Apache官方网站下载最新版本的Solr,解压后配置环境变量,确保Java环境已安装并设置好。 2. 启动Solr:运行bin/solr start命令启动单节点服务,或者在SolrCloud模式下使用bin/solr ...

    solr全文检索环境搭建

    Solr全文检索环境搭建 Apache Solr是一款基于Java的开源搜索服务器,专为高效全文检索、拼写检查、高亮显示结果以及...记住,实践是掌握技术的关键,不断尝试和探索,你将能更好地利用Solr提升你的应用的搜索体验。

    Java搜索服务Solr操作指南.pdf

    Solr是一个独立的基于全文检索的企业级搜索应用服务器,它支持通过HTTP利用XML将文档加载到搜索集合中,用户可以通过HttpGet操作发送查找请求,并得到搜索的返回结果。在Java后台开发中,Solr通过SolrJ客户端库与...

    ansj_solr_all

    ANSJ(Automatic NLP Segmentation and Judgement)是一款优秀的中文分词和词性标注工具,而Solr则是Apache基金会开源的全文搜索和分析引擎。当ANSJ与Solr相结合时,可以构建出强大的中文搜索引擎。本文将深入探讨...

    solr教材-PDF版

    - **1.2.5 缓存**:Solr利用多种缓存机制来提高搜索响应速度,例如查询结果缓存、文档缓存等。 - **1.2.6 复制**:Solr支持主/从架构,通过复制功能可以在多个服务器间同步索引数据,确保数据的一致性和冗余。 - **...

    自己搭建的Solr环境

    Solr是Apache软件基金会开发的一款高性能、全文搜索引擎,它提供了分布式搜索、索引和分析大量数据的能力。在本文中,我们将深入探讨如何自己搭建一个Solr环境,以及在这个过程中涉及的关键知识点。 首先,我们需要...

    sorlr + tomcat+ 庖丁解牛中文分词 配置文档

    标题 "sorlr + tomcat+ 庖丁解牛中文分词 配置文档" 提到的是一个关于在Apache Solr中集成Tomcat服务器,并利用庖丁解牛中文分词工具进行中文处理的配置教程。这个配置过程对于搭建支持中文搜索的Solr环境至关重要。...

    我的配置成功的solr8+tomcat.zip

    在结合Tomcat9作为应用服务器后,可以提供一个稳定且可扩展的平台,用于搭建企业的全文检索服务。本配置成功案例主要涉及了几个关键点:Solr8的安装与配置、Tomcat9的部署、实时数据库批量更新以及IK中文分词器的...

    solr7.5官方文档

    Apache Solr 7.5 官方文档是一份全面介绍如何安装、配置及管理 Solr 的手册,旨在帮助用户从零开始搭建并高效利用 Solr 的强大功能。 #### 主机与端口示例 文档提供了具体的主机和端口示例,帮助用户更好地理解 ...

    solr教程+实例

    Apache Solr是一款开源的企业级全文搜索引擎,由Apache软件基金会开发,基于Java语言,具有高效、可扩展的特点。它为大型、分布式搜索应用提供了强大的支持,包括文档检索、拼写建议、高亮显示搜索结果、近似搜索等...

    Solr开发指南.pdf

    而Solr则是一个完整的搜索引擎服务,它可以独立运行,适合构建企业级搜索解决方案,特别适用于快速搭建站内搜索功能。Solr提供了更多高级特性,如多核心(Core)管理、数据导入处理、丰富的查询语法等。 【Solr下载...

    Solr中文教程技术文档.docx

    总之,Solr 是一个强大的全文搜索引擎,通过与 Lucene 结合,我们可以轻松地搭建搜索服务,并支持中文搜索。理解其工作原理,正确配置服务器和索引,是利用 Solr 实现高效搜索的关键。同时,选择合适的中文分词工具...

Global site tag (gtag.js) - Google Analytics