Lucene之——获取索引关键字给Jquery自动填充框架使用
来源:互联网 发布:javascript面试 编辑:程序博客网 时间:2024/06/01 08:58
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/49624703
通过Lucene的lukeall-1.0.0.jar 通过 java –jar lukeall-1.0.0.jar 可以通过界面的方式可以看到索引库的所有信息截图如下:
但是现在我们需要获取合适的Term,然后通过命中率排序, 最后的结果转化为 JSON格式交给Jquery的自动填充框架如何实现呢?
Lucene中有个IndexSearcher:此类是用来根据Query查询语句来查询的类. 除了此类外. Lucene还有一个IndexReader类. 此类可以获取所有的索引源码如下:
private static IndexReader reader = null;static {try {reader = IndexReader.open(FSDirectory.open(new File("D:\\workspace\\lucene3\\indexData")));} catch (Exception e) {throw new RuntimeException(e);}}// 返回所有的关键词Termpublic static TermEnum getAllTerm() {try {return reader.terms(); // reader.terms(term); 这个方法是无效的,看源码就清楚了} catch (IOException e) {throw new RuntimeException(e);}}
其实IndexReader是一个抽象类 通过API查看如下:
public abstract class IndexReader 其中还有一个reader.terms(term);方法,此方法是抽象方法.可以用来过滤的,但是我们可以看到在IndexReader下面还有个FilterIndexReader子类 通过名字可以看出是个过滤的查询类 但是通过源码我们可以看到它的确实现了 terms(term) 这个方法, 但是我们查看源码会发现.此方法没有做任何操作还是调用了term() 所以我们有两个选择 第一:继承FilterIndexReader 或者IndexReader 重写term()方(根据尽量避免使用继承的原则我们不推荐) 第二自己在独立写个过滤的方法
所以我们可以看到过滤的源码:
public static KeyWord[] getContintTerm(Term term) {try {return FilterTerm(reader.terms(), term);} catch (IOException e) {throw new RuntimeException(e);}}// 由于不但要能存储Term也需要存储频率所以可以自定一个keyWord类型private static KeyWord[] FilterTerm(TermEnum enums, Term term) {List<KeyWord> terms = new ArrayList<KeyWord>();boolean isHave = false;try {isHave = enums.next();while (isHave) { if (Pattern.matches("(\\w|[\u4E00-\u9FA5])*" + word + "(\\w|[\u4E00-\u9FA5])*", temp.text())) {KeyWord keyWord = new KeyWord(enums.term().text(), enums.docFreq());terms.add(keyWord);}isHave = enums.next();}} catch (IOException e) {throw new RuntimeException(e);}return SortKeyWord(terms.toArray(new KeyWord[terms.size()]));}把关键字查询出来之后 需要排序所以编写了一个对数组排序的冒泡算法
private static KeyWord[] SortKeyWord(KeyWord[] keywords) {for (int i = 0; i < keywords.length - 1; i++) {for (int j = i + 1; j < keywords.length; j++) {if (keywords[i].getNumber() < keywords[j].getNumber()) {KeyWord temp = keywords[i];keywords[i] = keywords[j];keywords[j] = temp;}}}return keywords;}
如果你输入h 可以得到如下结果:
[DEBUG] 关键字为:hp 搜索的结果为: 46[DEBUG] 关键字为:hello 搜索的结果为: 9
最后把得到的关键字转化为json格式交给Jquery的自动填充插件则可以完成自动补全功能
- Lucene之——获取索引关键字给Jquery自动填充框架使用
- #yii框架学习之路#想使用自动填充时,填充不上去
- jquery插件自动填充
- jquery自动填充勾选框
- Lucene使用之构建索引、查询
- Lucene简单使用一之文件索引
- JAVAWEB开发之Lucene详解——Lucene入门及使用场景、全文检索、索引CRUD、优化索引库、分词器、高亮、相关度排序、各种查询
- Lucene学习之一:使用lucene为数据库表创建索引,并按关键字查询
- 全文搜索Lucene——之倒排索引
- 全文搜索Lucene——之倒排索引
- 全文搜索Lucene——之倒排索引
- Lucene——索引删改
- 使用jquery autocomplete实现类似搜索引擎的自动填充功能
- 使用jQuery和Ajax自动填充选择框(select)
- 4、学习lucene之获取索引的基本信息
- 如何使用 Android O 的自动填充框架
- 如何使用 Android O 的自动填充框架
- java之lucene索引
- Facebook Android客户端热更新
- ListSet_有序表搜索
- 纹理贴图原理总结
- 第7讲项目1----------正差值
- 【D3.js数据可视化实战】--(3)桑基图(sankey)的绘制
- Lucene之——获取索引关键字给Jquery自动填充框架使用
- Js插件ECharts,HighCharts学习网址整理
- linux 下MySQL主从复制
- 使用HttpUrlConnection上传文件
- 《30天自制操作系统》学习笔记
- iOS学习之iOS沙盒(sandbox)机制和文件操作(一)
- LeetCode Bulls and Cows
- 小作坊的安全管家之软件管理
- 机器学习-多变量的线性回归模型与实现笔记