Solr之拼音检索。
拼音检索中国人的专用检索,例如:中文内容为“中国”的输入 “zhongguo”、“zg”、“zhonggu 全拼”、“简拼”、“拼音”的相邻的一部分都应该能检索出“中国”来。
想要实现拼音检索第一个就是拼音转换,我这里用的是pinyin4j进行拼音转换。第二个就是N-Gram的题目,推敲到用户可能输入的既不是前缀也不是后缀,所以此处选择的是N-Gram,Solr里的实现叫 EdgeNGramTokenFilter,但是分的太细了,不需要这么复杂 EdgeNGramTokenFilter,也就是说我们用的N-Gram不同于传统的N-Gram。
同样的例子使用EdgeNGramTokenFilter从前往后取2-Gram的结果是zh,一般是取min - max 之间的所有 gram,所以使用EdgeNGramTokenFilter取2-20的gram结果就是zh,zho,zhon,zhong,zhongg,zhonggu,zhongguo,从这个例子也不难理解为什么我要选择使用EdgeNGramTokenFilter而非一般意义上的N-Gram,考虑到用户可能输入的不是前缀而是后缀,所以为了照顾这些用户,我选择了从前往后和从后往前使用了两次 EdgeNGramTokenFilter,这样不只是前缀、后缀,二十任意的字串都考虑进去了,所以大幅度的提高了搜索体验。
现在思路明确了我们把它结合到Solr中,为了方便使用现在写了两个Filter进行处理拼音分词问题一个是拼音转换Filter(Pinyin TransformTokenFilter)一个是拼音N-Gram的Filter(PinyinNGramTokenFilter),这样一来使用时就不用再添加索引前做拦音的转换了。而且Pinyin Transform TokenFilter 还有个好处就是它只使用中文分词器分过的词,也就是说做转换的词都是有用的不重复的,不会对没用的停词类的做拼音转换和重复拼音转换,这样大大的提高了拼音转换速度。
想要Solr支持拼音检索就要先把拼音分词(PinyinAnalyzer)的jar复制到\solr\contrib\analysis-extras\lib下,然后在schema.xml中配置一个拼音字段类型:
<fieldType name = "text_pinyin" class = "solr.TextField" positionIncrementGrap = "0">
<analyzer type = "index">
<tokenizer class = "org.apache.lucene.analysis.cn.smart.SmartChineseSentenceTokenizerFactory" />
<filter class = "org.apache.lucene.analysis.cn.smart.SmartChineseWordTokenFilterFactory" />
<filter class = "com.shentong.search.analyzers.PinyinTransformTokenFilterFactory" minTermLength = "2" />
<filter class = "com.shentong.search.analyzers.PinyinNGramTokenFilterFactory" minGram = "1" maxGram = "20" />
</analyzer>
<analyzer type = "query">
<tokenizer class = "org.apache.lucene.analysis.cn.smart.SmartChineseSentenceTokenizerFactory" />
<filter class = "org.apache.lucene.analysis.cn.smart.SmartChineseWordTokenFilterFactory" />
<filter class = "com.shentong.search.analyzers.PinyinTransformTokenFilterFactory" minTermLength = "2" />
<filter class = "com.shentong.search.analyzers.PinyinNGramTokenFilterFactory" minGram = "1" maxGram = "20" />
</analyzer>
</fieldType>
minTermLength:最小中文词长度,意思是小于这个值的中文词不会做拼音转换。
minGram:最小拼音切分长度。
如果想使用简拼的话在拼音转换Filter使用这个参数isFirstChar="true"就可以了。
在这个拼音类型中我们使用了smartcn的中言语分词器,如果想使用其他的自己换掉就行了。现在我们在原来索引中加入一个拼音字段,因为只做索引,我们可以这样配置:
<field name = "pinyin" type = "text_pinyin" indexed = "true" stored = "false" multiValued = "false" />
加完后我们重新启动Solr测试一下看看。
由于上面minTermLenght和minGram设置的值,现在出现了人没有进行拼音转换并且最小拼音切分是从1个开始的。
到这里我们的配置还有没完成,还要加几个copyFiled,这样就不用单独处理我们新加的拼音字段。
<copyField source = "context" dest = "pinyin" />
<copyField source = "text" dest = "spell" />
到现在就可以使用拼音检索了。
拼音分词器jar要复制到项目内。
Solr之拼音检索。相关推荐
- C# 通过拼音检索中文名称
转自:http://blog.csdn.net/wu_zheng_peng/article/details/8639828 using System; using System.Collections ...
- 支持拼音检索的TextBox扩展控件-使用
我的上一个支持拼音检索的TextBox扩展控件,由于有些网友留言和发邮件问如何用, 如:菜鸟AAA等当时想到肯定大家都会用,就没上传示例程序. 原文为:http://www.cnblogs.com/w ...
- 拼音检索VS五笔检索---Javascript实现
前段时间在研究用js 实现拼音首字母以及五笔首字符的检索,呵呵,终于实现了.找了好多资料.方法也是多样的.就是检索的内容多了.循环的次数多,导致检索有点慢,也有可能我写的js也不是特别的精炼,但是不管 ...
- ElasticSearch学习(四)—— 中文按拼音排序拼音检索
使用pinyin分词器 下载拼音分词器https://github.com/medcl/elasticsearch-analysis-pinyin 解压进入目录elasticsearch-analys ...
- 如何在大型系统中提供拼音检索服务
最近有这么一个需求,客户要求在选择一些业务数据时,能提供类似谷歌的拼音检索功能,由于目前系统中的业务数据都是存储在数据,而且 数据量都比较大,目前主要考虑两种实现方式: 第一种通过构建一个包含有所 ...
- easyui combobox 拼音检索快捷选择输入
easyui combobox 拼音检索快捷选择输入 效果如图 $.ajax({url: UserActionUrl + '?action=listuserworktype',dataType: 'j ...
- 集合(7)——Dictionary字典(2)——C#中的拼音检索
1.为什么要用拼音检索?坐席只能根据客户的语言进行判断,无法准确写对姓名. 2.Visual Studio International Pack 3.练习:根据文档学习使用方法.发下安装包自己探索.目 ...
- 前端拼音检索-【pinyin-match】
前端开发时,有时数据过多需要快速检索功能,常用的关键字匹配和拼音检索,发现一个不错的插件pinyin-match. 个人感觉应用场景为,数据量不是特别大,一次性加载到前端,由前端实现过滤.数据过大时还 ...
- 【Solr】 solr对拼音搜索和拼音首字母搜索的支持
问:对于拼音和拼音首字母的支持,当你在搜商品的时候,如果想输入拼音和拼音首字母就给出商品的信息,怎么办呢? 实现方式有2种,但是他们其实是对应的. 用lucene实现 1.建索引, 多建一个索引字段 ...
最新文章
- 在.Net中,如何创建一个后台执行的进程?
- python之数据库连接
- 程序员的10个神秘等式
- 云服务器支持javascript,云服务器支持javascript
- 不容易,今天的成果。
- 支付宝客户端java版_支付宝对接支付-JAVA版
- 剖析车联网的完美形态,机器人化还是智能交通?
- smartsvn基本操作
- Python学习——语法错误与异常
- 服务器端身份验证技术,身份认证技术和协议的常用方法
- 数据分析之北京房价复习
- 揪出键盘上的“老鼠”
- 6.process.nextTick()
- c++ 问题:查找预编译头时遇到意外的文件结尾
- 【Sublime Text 3】Sublime Text 3 - cracked 3086
- mac电脑打不开应用程序的解决方法
- OpenGL(四) 左右手坐标系及基本坐标变换
- 蚊子看了想咬人,人类看了都说好
- word打不开,提示“很抱歉,无法打开...docx,因为内容有问题。”的解决----亲测,写的论文出现此问题打不开吓尿了
- 优思学院|略谈六西格玛管理理论是如何发展起来的?
热门文章
- 陈伊力:手游将会出现更多同步交互类游戏
- 木纤维增强聚丙烯复合材料:压缩和注塑成型工艺
- 热销超极本iFunk翼S到底怎么样?
- 安装ie9提示未能完成安装_win7系统安装Ie提示“Internet explorer未能完成安装”的解决方法...
- uni-app app平台微信支付
- 病毒木马查杀实战第024篇:MBR病毒之编程解析引导区
- 三星手机和计算机如何连接打印机,三星打印机连接到电脑没反应怎么办
- 从ServerSwitch到SONiC Chassis:数据中心交换机技术的十年探索历程
- 微信小程序+SpringBoot实现校园快递代收平台
- 论文阅读:A Survey on Why-Type Question Answering Systems