Lucene + Pinyin4J 提供首字母搜索(——)
遇到一个集团需求,要求在地址查询时候提供拼音搜索,第一反应应该不难,不过实现过程中却一波三折。
1、第一步是讲字段首字母进行索引,具体可以使用Pinyin4j提供的方法完成。
2、原来系统用的lucene3.0,分词用的ikanalyzer3.2 ,不支持连续字母和数字的分词,网上搜索下 ikanalyzer5.2 可以支持,下载下来发现必须用1.7JDK,如此高的版本,实际上已经把采纳的可能枪毙了。然后进行测试,发现仍然不行。最后找到 WildcardQuery 查询;具体代码如下
Boolean isPingYin = false;
if(firstCharacter.matches("^[A-Za-z]+$")){
isPingYin = true;
}
if(isPingYin) {
if(tempStandName.length()<4) {
return list;
}
WildcardQuery wq=new WildcardQuery(new Term("standNamePingyin","*" + tempStandName + "*"));
BooleanQuery booleanQuery = new BooleanQuery();
booleanQuery.add(wq, Occur.MUST);
TermQuery termQuery1 = new TermQuery(new Term("outSide", "0"));
booleanQuery.add(termQuery1, Occur.MUST);
TermQuery termQuery2 = new TermQuery(new Term("bindEqps", "1"));
booleanQuery.add(termQuery2, Occur.MUST);
/**
* 模糊查询器
*/
TopDocs topDocs_pp = isearcher.search(booleanQuery, count);
ScoreDoc[] scoreDocs_pp = topDocs_pp.scoreDocs;
for (int i = 0; i < (topDocs_pp.totalHits > count ? count : topDocs_pp.totalHits); i++)
{
VOqryAddrSegm voQAS = new VOqryAddrSegm();
Document targetDoc = isearcher.doc(scoreDocs_pp[i].doc);
voQAS.setSegmID(targetDoc.get("segmId"));
voQAS.setStandName(targetDoc.get("standName"));
voQAS.setSegmType(targetDoc.get("segmType"));
voQAS.setRegionId(targetDoc.get("regionId"));
voQAS.setBindEqps(targetDoc.get("bindEqps"));
voQAS.setOutSide(targetDoc.get("outSide"));
list.add(voQAS);
}
}
实现的效果:

Lucene + Pinyin4J 提供首字母搜索(——)的更多相关文章
- 【Solr】 solr对拼音搜索和拼音首字母搜索的支持
问:对于拼音和拼音首字母的支持,当你在搜商品的时候,如果想输入拼音和拼音首字母就给出商品的信息,怎么办呢? 实现方式有2种,但是他们其实是对应的. 用lucene实现 1.建索引, 多建一个索引字段 ...
- jQuery 实现前端模糊匹配与首字母搜索
实现效果 源码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...
- iOS拼音搜索,拼音首字母搜索
扩展了一下 搜索框,能够实现拼音和首字母模糊搜索 基本搜索 上一篇文章 #import "NSString+utility.h" @interface WJWPinyinSearc ...
- MVC+Jquery+autocomplete(汉字||拼音首字母搜索)
最近项目中用到了autocomplete了,总结一下经验. 我们先来看一下效果:
- Elasticsearch高级搜索排序( 中文+拼音+首字母+简繁转换+特殊符号过滤)
一.先摆需求: 1.中文搜索.英文搜索.中英混搜 如:"南京东路","cafe 南京东路店" 2.全拼搜索.首字母搜索.中文+全拼.中文+首字母混搜 如 ...
- 通过pinyin4j.jar将(汉字拼音混合字符串)转化成字母首字母
通过pinyin4j.jar将(汉字拼音混合字符串)转化成字母首字母 例如 我的中国心 ==> wdzgx 我的中国心ya ==> wdzgxya woai我的中国 ==> w ...
- iOS- 本地文本容错搜索引擎2-->如何实现英文(英文首字母,汉语拼音)对中文的搜索?
1.前言 先闲说几句,最近北京的雾霾真是大,呛的我这攻城师都抗不住了.各位攻城师们一定要爱护好自己的身体!空气好时,少坐多动. 如果条件好的话,最好让你们BOSS搞个室内空气净化器.因为那几天一般 ...
- 终结者:借助pinyin4j相关jar包提取汉字的首字母
import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinCase ...
- java获得汉语首字母
package org.scbit.lsbi.scp.utils; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourcefor ...
随机推荐
- 《从零開始学Swift》学习笔记(Day 59)——代码排版
原创文章,欢迎转载.转载请注明:关东升的博客 代码排版包括: 空行.空格.断行和缩进等内容.代码排版内容比較多工作量非常多.可是非常重要. 空行 空行将逻辑相关的代码段分隔开.以提高可读性. 下列情况 ...
- 2.Spring Boot 入门
转自:https://blog.csdn.net/catoop/article/details/50501664
- 每日技术总结:Toast组件,eslint,white-space,animate,$emit
1.一个优雅的提示是网站必不可少的. 请参考:vue2.0 自定义 提示框(Toast)组件 2.ESLint使用总结 (1)在.eslintrc.js里关闭某条规则, '规则名': 'off'或0 ...
- 使用SystemC进行硬件仿真
使用SystemC进行硬件仿真 环境 linux-x86-64 bash g++ 下载解压SystemC SystemC下载地址 解压下载的包 tar zxvf systemc-2.3.3.tar.g ...
- 算法 Tricks(五)—— 将一个序列量化为何值时平方误差最小
设数列为 A[],区间在 [a, b],设使量化后误差平方最小的数值为 m,则误差平方关于 m 的函数可以写作如下形式: ∑i=ab(A[i]−m)2=(b−a+1)⋅m2−2m∑i=abA[i]+∑ ...
- Linux中U盘和SD卡加载卸载命令
U盘挂载命令U盘插入的时候会显示启动信息,启动信息中sda: sda1指U盘的设备名为sda1dev设备目录下有一个sda1设备文件,此设备文件就是我们插入的U盘,我们将这个设备文件挂载到Linux系 ...
- Ubuntu设置IP(VMware9.03)
说明:在VMware上新安装Ubuntu11.04(64位) vi编辑器特难用,输入老出错,费了老大劲才把IP改好,IP改完之后最好立马重装一个编辑器vim. 设置静态IP: # vi /etc/ne ...
- 【例题3-2 UVA - 10082】WERTYU
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用一个字符数组,用数组的下标相邻来代表相邻的关系. [错的次数] 在这里输入错的次数 [反思] int i; for (i = 0; ...
- [Angular2 Form] Validation message for Reactive form
<div class="form-field"> <label>Confirm Password: </label> <input typ ...
- 【66.47%】【codeforces 556B】Case of Fake Numbers
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...