【apache solr系列】jcseg与pinyinTokenFilter实现中文缩写查找

转载请注明:http://blog.csdn.net/weijonathan/article/details/40504029

今天要写的是关于分词查询的。

我们先来看下下面这张图

应该说很多做搜索的系统都会涉及到的一个话题;中文缩写搜索,当你输入相应的中文缩写的时候,会给你提示相应的中文词组

而现在网上各式各样的文章都没有多少能真正介绍如何实现的。经过前阵子的研究,我这边整理一个我自己研究的效果,

先来看下相关插件以及下载地址:

jcseg下载地址及官网

下载地址:http://git.oschina.net/lionsoul/jcseg

官网地址:https://code.google.com/p/jcseg/

pinyinTokenFilter插件地址:

https://github.com/Jonathan-Wei/pinyinTokenFilter

jsceg是一个中文分词器,而pinyinTokenFilter是一个pinyin过滤器。

1、下载jcseg后解压,将jcseg\output目录中的jar包拷贝到solr的安装目录下

2、将jcseg的lexicon分词库放到apache-tomcat-7.0.53\webapps\solr\WEB-INF\classes目录下并配置lexicon.path路径

1)、jcseg默认的lexicon.path也就是分词词库的位置是在solr发布项目的lib目录;所以可以选择将压缩包中的lexicon目录拷贝到lib包底下

2)、配置lexicon.path配置到你指定的词库目录

疑问:

这里可能大家会问我为什么不用ik,原因是在Solr4.0发布以后,官方取消了BaseTokenizerFactory接口,而直接使用Lucene Analyzer标准接口。因此IK分词器2012 FF版本也取消了org.wltea.analyzer.solr.IKTokenizerFactory类。所以IK无法配置fliter节点;配置了之后启动tomcat直接就报错了;具体错误内容大家可以自己试验下,我这里就不具体展开了!

3、下载pinyinTokenFilter,(这个插件我做了一点修改,作者当前的项目存在bug,修改的内容不多,大家可以看我github上的提交修改内容)配置schame.xml添加以下配置

<fieldType name="text_pinyin" class="solr.TextField">
      <analyzer type="index">
          <tokenizer class="org.lionsoul.jcseg.solr.JcsegTokenizerFactory" mode="complex"/>
          <filter class="me.dowen.solr.analyzers.PinyinTransformTokenFilterFactory"
              isOutChinese="true" firstChar="true" minTermLength="1"/>
         <!--<filter class="me.dowen.solr.analyzers.PinyinTransformTokenFilterFactory"
              isOutChinese="true" firstChar="false" minTermLength="1"/>-->
          <filter class="solr.StopFilterFactory" ignoreCase="true"
              words="stopwords.txt" />
          <filter class="solr.LowerCaseFilterFactory" />
          <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
      </analyzer>
          <analyzer type="query">
          <tokenizer class="org.lionsoul.jcseg.solr.JcsegTokenizerFactory" mode="complex"/>
          <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt"
              ignoreCase="true" expand="true" />
          <filter class="solr.StopFilterFactory" ignoreCase="true"
              words="stopwords.txt" />
          <filter class="solr.LowerCaseFilterFactory" />
      </analyzer>
  </fieldType>

这里注意下,这个插件支持拼音全拼以及缩写,但是当配置缩写和全频一起使用的时候,貌似不大好使。所以我这里也只配置了一个缩写,让大伙看看效果;

看下参数的一些说明:

isOutChinese:是否保留原输入中文词元。可选值:true(默认)/false

firstChar:输出完整拼音格式还是输出简拼。简拼输出是由原中文词元的各单字的拼音结果的首字母组成的。可选值:true(默认)/false

minTermLength:仅输出字数大于或等于minTermLenght的中文词元的拼音结果。默认值为2。

接下来看下solr中的分析结果:

这里大伙可以看到,“猩球崛起“缩写被分为x,xq,xqj,xqjq,当你输入这4个缩写的时候它就会给你提示包含"猩球崛起"的内容;

接下来看下我们查询结果:

可以看到,我输入xqj进行查询,是可以查到猩球崛起这个内容的。这里猩球崛起是一个词语,jcseg是支持自定义词库的,所以这里我配置了自己的一个简单的词库;

pinyinTokenFilter这个插件,如果不配合其他分词器使用的话,用插件README里面的方法进行测试,你是会看到你输入的单词会被分为一个个单字的词。README中使用的是

<tokenizer class="solr.StandardTokenizerFactory" />

pinyinTokenFilter这个插件还有不完全的地方,所以大伙使用过程中有什么问题可以提下,我也跟踪一下。谢谢。

时间: 2024-11-01 09:27:40

【apache solr系列】jcseg与pinyinTokenFilter实现中文缩写查找的相关文章

玩转大数据系列之Apache Pig如何与Apache Solr集成(二)

散仙,在上篇文章中介绍了,如何使用Apache Pig与Lucene集成,还不知道的道友们,可以先看下上篇,熟悉下具体的流程. 在与Lucene集成过程中,我们发现最终还要把生成的Lucene索引,拷贝至本地磁盘,才能提供检索服务,这样以来,比较繁琐,而且有以下几个缺点: (一)在生成索引以及最终能提供正常的服务之前,索引经过多次落地操作,这无疑会给磁盘和网络IO,带来巨大影响 (二)Lucene的Field的配置与其UDF函数的代码耦合性过强,而且提供的配置也比较简单,不太容易满足,灵活多变的

Lucene 5.2.1 + jcseg 1.9.6中文分词索引(Lucene 学习序列2)

Lucene 5.2.1 + jcseg 1.9.6中文分词索引(Lucene 学习序列2) jcseg是使用Java开发的一个开源的中文分词器,使用流行的mmseg算法实现.是一款独立的分词组件,不是针对lucene而开发,但是提供了最新版本的lucene和solr分词接口. Java Code <span style="font-size:14px;">package com.qiuzhping.lucene; import java.sql.Connection; i

01 Apache Solr:提升检索体验 为什么是Solr

背景: 最近开发一个大型的仓储管理平台项目,项目的前身是无数个版本的历史悠久的基于CS模式的Windows桌面程序.然后对于每一个客户,我们可能需要为之定制比较个性化的特殊功能.于是,有一个核心研发团队,以一两年为周期开发一个核心功能版本的软件:然后拿出去推广销售,每每销售成功,做售前的同事都是拿了一大堆定制化的需求回来的:然后一场在核心功能上的定制和个性化扩展就开始了,完成开发就可以去客户现场实施了:最后,就会有部分维护的同事将这个客户的系统纳入他们的日常工作清单中.周而复始.诚然,这种方式在

[摘]全文检索引擎Solr系列—–全文检索基本原理

原文链接--http://www.importnew.com/12707.html 全文检索引擎Solr系列-–全文检索基本原理 2014/08/18 | 分类: 基础技术, 教程 | 2 条评论 | 标签: solr 分享到: 64 本文作者: ImportNew - 刘志军 未经许可,禁止转载! 场景:小时候我们都使用过新华字典,妈妈叫你翻开第38页,找到"坑爹"所在的位置,此时你会怎么查呢?毫无疑问,你的眼睛会从38页的第一个字开始从头至尾地扫描,直到找到"坑爹&quo

Apache solr(一)

概念:Apache Solr 是一个开源的搜索服务器.Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现.Apache Solr 中存储的资源是以 Document 为对象进行存储的.每个文档由一系列的 Field 构成,每个 Field 表示资源的一个属性.Solr 中的每个 Document 需要有能唯一标识其自身的属性,默认情况下这个属性的名字是 id,在 Schema 配置文件中使用:<uniqueKey>id</uniqueKey>

Apache solr使用

一.Solr介绍 最近在一个项目中做了一个全文检索的功能,刚开始本来打算用Apache Lucene去实现,毕竟之前对Lucene有一点了解,但是在网上看技术类文章时看见了别人介绍Apache Solr,感觉挺好的, 还是一个开源的搜索服务器,主要基于 HTTP 和 Apache Lucene 实现.Apache Solr 中存储的资源是以 Document 为对象进行存储的,高亮显示搜索结果,有自带的中文分词技术. 二.Solr配置 第一步:下载Solr, http://www.apache.

Apache Solr采用Java开发、基于Lucene的全文搜索服务器

http://docs.spring.io/spring-data/solr/ 首先介绍一下solr: Apache Solr (读音: SOLer) 是一个开源.高性能.采用Java开发.基于Lucene的全文搜索服务器,文档通过Http利用XML加到一个搜索集合中,查询该集合也是通过 http收到一个XML/JSON响应来实现.Solr 中存储的资源是以 Document 为对象进行存储的.每个文档由一系列的 Field 构成,每个 Field 表示资源的一个属性.Solr 中的每个 Doc

How to Install Apache Solr 4.5 on CentOS 6.4

By Shay Anderson on October 2013 Knowledge Base  /  Linux  /  How to Install Apache Solr 4.5 on CentOS 6.4 In this tutorial I explain how to install Apache Solr 4.5 on CentOS 6.4. In all the examples below I am using the root user, if you are not you

Apache Shiro系列四:Shiro的架构

Shiro的设计目标就是让应用程序的安全管理更简单.更直观. 软件系统一般是基于用户故事来做设计.也就是我们会基于一个客户如何与这个软件系统交互来设计用户界面和服务接口.比如,你可能会说:“如果用户登录了我们的系统,我就给他们显示一个按钮,点击之后可以查看他自己的账户信息.如果没有登录,我就给他显示一个注册按钮.” 上述应用程序在很大程度上是为了满足用户的需求而编写的,即便这个“用户”不是人,而是一个其他的软件系统.你仍然是按照谁当前正在与你的系统交互的逻辑来编写你的逻辑代码. Shiro的设计