solr4.7.2+mmseg2.0+pinyinAnalyzer实现拼音、简拼检索

阅读更多

生产环境:

solr4.7.2

jdk1.6

lucene4.7.2

mmseg4j-core-1.10 (https://github.com/chenlb/mmseg4j-core.git)

mmseg-solr-2.0 (https://github.com/chenlb/mmseg4j-solr.git)

pinyin4j-2.5.0

pinyinAnalyzer (https://github.com/liangbaolin/pinyinAnalyzer.git)

说明:

  1. 由于mmseg4j本身对max-word模式下分词做了最小只能是2个词的限制,而作者又没有好的办法,所以我们针对自身应用做了一些调整
  2. 由于pinyinAnalyzer是针对solr5.0以上的版本,所以我们对其源码做了调整,将其整合到了4.7.2中;
  3. 由于pinyinAnalyzer中转换拼音简称的时候使用的是pinyin4j包中的getPinyinShortCollection方法,而该方法输出简拼时会多输出一个字母(如:“重庆”的输出为[cq,zq,c,z],而其中的单个字母对索引影响极大);因此将其替换为getPinyinShort方法(如:“重庆”的输出为cq,zq)
 

pinyinAnalyzer源码修改:(这里只列主要的PinyinTokenFilter.java)

solr4.7.2+mmseg2.0+pinyinAnalyzer实现拼音、简拼检索_第1张图片

需求:

  1. 需要搜索拼音能搜到对应企业,如搜索”xiaomi”可以查询出“小米通讯技术有限公司”
  2. 搜索“xiaomi”可以高亮汉字“小米”
  3. 可以使用拼音简称搜索,如搜索“cq”或“zq”可以搜到包含“重庆”的数据

方案分析:

开始考虑两种方案:

方案一:在应用中将中文搜索词转为拼音,对于关键词统一以英文或拼音的形式搜索

方案二:通过分词手段,在建立索引时直接将分词后的关键词对应的全拼(包括多音字全拼)、简拼(如cq,zq)一并写入索引;

              查询时,只需要以同样规则将搜索词分词后再加入拼音,这样既可以搜索中文,又可以搜索拼音

说明:因为方案二的调整仅限于索引层面,而对应用本身毫无影响,所以最终选择方案二

 

前期含拼音分词测试:

1.分析词“重庆”、查询词“重庆”,分析结果如下:


solr4.7.2+mmseg2.0+pinyinAnalyzer实现拼音、简拼检索_第2张图片

2.分析词“重庆”、查询词“cq”,分析结果如下:

solr4.7.2+mmseg2.0+pinyinAnalyzer实现拼音、简拼检索_第3张图片

3.分析词“重庆”、查询词“chongqing”,分析结果如下:

solr4.7.2+mmseg2.0+pinyinAnalyzer实现拼音、简拼检索_第4张图片

 

solr配置:

1.将修改过源码的pinyinAnalyzer.jar、msseg4j-core.jar放于solr4.7.2对应lib目录

2.将pinyin4j-2.5.0.jar放于solr4.7.2对应目录下

3.配置schema.xml:

   a.定义字段类型

   

       

           

           

       

       

           

           

       

   

   b.将对应field的type改为text_mmseg4j_pinyin

   c.重启solr

 

修改后的源码及jar包见附件

  • solr4.7.2+mmseg2.0+pinyinAnalyzer实现拼音、简拼检索_第5张图片
  • 大小: 168.9 KB
  • solr4.7.2+mmseg2.0+pinyinAnalyzer实现拼音、简拼检索_第6张图片
  • 大小: 118.5 KB
  • solr4.7.2+mmseg2.0+pinyinAnalyzer实现拼音、简拼检索_第7张图片
  • 大小: 105.9 KB
  • solr4.7.2+mmseg2.0+pinyinAnalyzer实现拼音、简拼检索_第8张图片
  • 大小: 112.1 KB
  • pinyinAnalyzer.jar (30.4 KB)
  • 下载次数: 107
  • pinyinAnalyzer.zip (48 KB)
  • 下载次数: 91
  • 查看图片附件

你可能感兴趣的:(solr,mmseg,pinyinAnalyzer,拼音检索)