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 ...
随机推荐
- java8新增特性(二)----函数式接口(Functional)
上一篇博客介绍了java8新增的Lambda表达式,这一节介绍一下java8的函数式编程,两者之间有什么联系呢?请往下看~~~ Lambda表达式怎样在java类型中表示的呢? 语言设计者投入了大量的 ...
- Nginx配置GZIP
记录一次解决网站加载慢的问题 一. nginx配置 gzip on;gzip_min_length 1k;gzip_buffers 4 16k;gzip_http_version 1.1;g ...
- document.write的注意点
如果给button点击事件添加document.write会消除页面所有元素,包括button按钮 <!DOCTYPE html> <html> <head> &l ...
- js日期常用方法
js获取日期时间格式 export function formatDateTime(timeStamp) { var date = new Date(); date.setTime(timeStamp ...
- 洛谷 P3131 [USACO16JAN]子共七Subsequences Summing to Sevens
P3131 [USACO16JAN]子共七Subsequences Summing to Sevens 题目描述 Farmer John's NN cows are standing in a row ...
- POJ 3468 A Simple Problem with Integers 线段树区间修改
http://poj.org/problem?id=3468 题目大意: 给你N个数还有Q组操作(1 ≤ N,Q ≤ 100000) 操作分为两种,Q A B 表示输出[A,B]的和 C A B ...
- Access WMI via Python from Linux
You can use Impacket (https://github.com/CoreSecurity/impacket) that has WMI implemented in Python. ...
- VMware Ubuntu安装具体过程
不是每个程序猿都必须玩过linux,仅仅是博主认为如今的非常多server都是linux系统的,而自己属于那种前端也搞.后台也搞,对框架搭建也感兴趣,可是非常多生产上的框架和工具都是安装在server ...
- js进阶 13-2 jquery动画滑动效果哪些注意事项
js进阶 13-2 jquery动画滑动效果哪些注意事项 一.总结 一句话总结:滑动里面这里up是隐藏,down是显示. 1.jquery动画默认的两个切换效果是什么(swing默认和linear的区 ...
- iOS_01_什么是ios
* ios是一款由苹果公司开发的操作系统(os是Operating Systen的简称),就像平时在电脑上用的Window XP.Window 7.都是操作系统. * 那什么是操作系统呢?操作系统其实 ...