IKAnanlyzer4Pinyin

2 篇文章 0 订阅
1 篇文章 0 订阅

修改了IKAnanlyzer的部分代码,使IKAnanlyzer支持了分词后再把词转换成拼音或者首字母来做索引,IKAznzylzer的作者博客,先感谢他的贡献。

汉字转拼音用到了github上的 jpinyin 开源库,感谢作者。

现在只需要IKAnanlyzer4Pinyin,你就可以实现中文分词,分词后全拼和首字母的索引。

主要用在搜索建议,通讯录搜索等需要首字母和全拼搜索的地方。

性能,在我数据测试中,全拼和首字母都建立索引,建索引时间增加了20%。


其中主要使用到了PerFieldAnalyzerWrapper,它可以实现对不同field的使用不用的anaylzer。源代码在 github 上,上面有完整示例。


建立索引:

//实例化IKAnalyzer分词器

        //使用PerFieldAnalyzerWrapper可以对不同的field使用不同的分词器

        Map<String, Analyzer> analyzerMap = new HashMap<String, Analyzer>();

        analyzerMap.put(quanpin, new IKAnalyzer4PinYin(false, IKAnalyzer4PinYin.PINYIN));

        analyzerMap.put(shouzimu, new IKAnalyzer4PinYin(false, IKAnalyzer4PinYin.PINYIN_SHOUZIMU));

        PerFieldAnalyzerWrapper wrapper = new PerFieldAnalyzerWrapper(new IKAnalyzer4PinYin(false), analyzerMap);

IndexWriterConfig iwConfig = new IndexWriterConfig(Version.LUCENE_40 , wrapper);

        搜索:

Analyzer analyzer = new IKAnalyzer4PinYin(true);

            QueryParser qp = new QueryParser(Version.LUCENE_40, fieldName,  analyzer);

            QueryParser qpQuanpin = new QueryParser(Version.LUCENE_40, quanpin,  analyzer);

            QueryParser qpShouzimu = new QueryParser(Version.LUCENE_40, shouzimu,  analyzer);

          

            Query query = qp.parse(keyword);

            Query queryQuanpin = qpQuanpin.parse(keyword);

            Query queryShouzimu = qpShouzimu.parse(keyword);

//            

            BooleanQuery bq=new BooleanQuery();

            BooleanQuery innerbq=new BooleanQuery();

//            

            bq.add(query, BooleanClause.Occur.SHOULD);

            bq.add(queryQuanpin, BooleanClause.Occur.SHOULD);

            bq.add(queryShouzimu, BooleanClause.Occur.SHOULD);

            innerbq.add(bq, BooleanClause.Occur.MUST);

            

// System.out.println("innerbq = " + innerbq);


//搜索相似度最高的5条记录

TopDocs topDocs = isearcher.search(innerbq , 5);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值