lucene为程序添加搜索功能,此功能基于已创建好的文档的索引之上。这里我已经为一些文档建立了索引,并保存到硬盘上。下面开始针对这些索引,添加搜索功能。

1、简单的TermQuery搜索

Java代码

    /**
* 【TermQuery方式搜索】
*
* 对特定的项进行查询,如filename等于XPP3-LICENSE.txt的文件
* @throws Exception
*/
public void testTerm() throws Exception {
Directory dir=FSDirectory.open(new File("d:/index/book_index/"));
IndexSearcher searcher=new IndexSearcher(dir); Term t=new Term("content","params");
Query query=new TermQuery(t);
TopDocs docs=searcher.search(query, 10);
System.out.println(docs.totalHits+"--------"); t=new Term("filename","version");
docs=searcher.search(new TermQuery(t), 10);
System.out.println(docs.totalHits);
searcher.close();
dir.close();
}

2、使用QueryParser转化用户复杂输入,进行与或非查询操作。

Java代码
    /**
* 【QueryParser查询】
*
*
* 模糊查询,与,或,非方式
* @throws Exception
*/
public void testQueryParse() throws Exception{
Directory dir=FSDirectory.open(new File("d:/index/book_index/"));
IndexSearcher search=new IndexSearcher(dir); QueryParser parser=new QueryParser(Version.LUCENE_30,"content",new SimpleAnalyzer());
Query query=parser.parse("+ADVISED +POSSIBILITY -JAVA");
TopDocs docs=search.search(query, 10);
/ assertEquals(1, docs.totalHits);
Document document=search.doc(docs.scoreDocs[0].doc);
System.out.println("查询第一个的名称"+document.get("filename"));
System.out.println("与或非查询个数"+docs.totalHits); query=parser.parse("Indiana OR University");
docs=search.search(query, 10);
System.out.println("Or查询个数"+docs.totalHits); search.close();
dir.close();
}

查询表达式

匹配文档

Java

默认域包含有Java项的文档

Java junit

Java OR junit

默认域包含有Java,junit中一个,或者两个的文档

+Java +junit

Java AND junit

默认域同时包含有Java和junit的文档

Title:ant

Title域中包含有ant的文档

Title:extreme -subject:sport

Title:extreme AND NOT subject:sport

Title域中包含extreme而且subject域中不包含sport

(agile OR extreme) AND methody

默认域包含有methody且包含agile或者extreme中的一个

Title:“junit in action”

Title域一定为junit in action的文档

Title:“junit action“ -5

Title域中junit和action的间隔小于5的文档

Java*

包含有Java开头的文档,如Javascript,Javaserver,Java等

Java~

包含与Java单词相近的文档,如Java

Lastdate:[1/1/09 TO 12/31/09]

Lastdate域在09年1月1号到09年12月31号的文档

3、近实时搜索

/**
* 【近实时搜索】
*
* @throws Exception
*/
public void testNRTsearch() throws Exception{
Directory dir=new RAMDirectory();
IndexWriter writer=new IndexWriter(dir, new StandardAnalyzer(Version.LUCENE_30), IndexWriter.MaxFieldLength.UNLIMITED);
for (int i = 0; i < 10; i++) {
Document doc=new Document();
doc.add(new Field("id", ""+i, Field.Store.NO, Field.Index.NOT_ANALYZED_NO_NORMS));
doc.add(new Field("text", "aaa", Field.Store.NO, Field.Index.ANALYZED ));
writer.addDocument(doc);
} IndexReader reader=writer.getReader();
IndexSearcher searcher=new IndexSearcher(reader); Query query=new TermQuery(new Term("text","aaa"));
TopDocs docs=searcher.search(query, 1);
System.out.println("[搜索的总数]"+docs.totalHits); //先删除id为7的文档,然后添加一个id为22的文档,进行搜索,看是不是近实时的
writer.deleteDocuments(new Term("id","7"));
Document doc=new Document();
doc.add(new Field("id", "22", Field.Store.NO, Field.Index.NOT_ANALYZED_NO_NORMS));
doc.add(new Field("text","bbb",Field.Store.NO,Field.Index.ANALYZED));
writer.addDocument(doc); //重启reader,然后搜索
IndexReader newReader=reader.reopen();
assertEquals(reader==newReader,false);
reader.close();
searcher=new IndexSearcher(newReader); TopDocs hits=searcher.search(query, 10);
assertEquals(9, hits.totalHits);
query=new TermQuery(new Term("text","bbb"));
hits=searcher.search(query, 10);
System.out.println("bbb文档的个数:"+hits.totalHits); //关闭资源
newReader.close();
writer.close();
}

lucene3.6笔记添加搜索功能的更多相关文章

  1. 011.Adding Search to an ASP.NET Core MVC app --【给程序添加搜索功能】

    Adding Search to an ASP.NET Core MVC app 给程序添加搜索功能 2017-3-7 7 分钟阅读时长 作者 本文内容 1.Adding Search by genr ...

  2. dgango中admin下添加搜索功能

    admin下添加搜索功能: 在表单中加入search_fields = ['ip','hostname']   可模糊匹配 当有人在管理搜索框中进行搜索时,Django将搜索查询分解成单词,并返回包含 ...

  3. layui-treeTable v2.0添加搜索功能

    layui-treeTable 添加搜索功能 在树形表格头部加一个input框: <div class="layui-inline"> <input class= ...

  4. ZKEACMS添加搜索功能,搜索插件说明

    ZKEACMS默认是不支持搜索功能的.但是搜索功能是比较常用的一个功能,使用这个搜索插件,可以让CMS支持搜索: 如下图所示: 数据库 Microstft Sql Server 2008R2 以上 页 ...

  5. 给 hugo 博客添加搜索功能

    起因 我的博客使用了 hugo 作为静态生成工具,自带的主题里也没有附带搜索功能.看来,还是得自己给博客添加一个搜索功能. 经过多方查找,从 Hugo Fast Search · GitHub 找到一 ...

  6. 给jekyll博客添加搜索功能

    使用SWIFTYPE为jekyll博客添加搜索引擎 步骤 1.首先去swiftype注册一个账号 2.接着添加自己想要配置的网站地址并为新设定的引擎添加一个名字(非会员只能设置一个引擎). 3.收到验 ...

  7. WinForm------给GridControl添加搜索功能

    //按钮点击事件 private void Btn_Search_Click(object sender, EventArgs e) { //获取编辑框的值 string text = this.te ...

  8. DevExpress 标题栏添加搜索功能

    上图是效果图 附件示例代码下载

  9. js table的笔记,实现添加 td,实现搜索功能

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

随机推荐

  1. android支付宝支付开发过程

    原文:android支付宝支付开发过程 支付宝开发流程: 1.在支付宝申请一个账号并开通开发者功能和移动支付的功能. 支付宝地址:https://auth.alipay.com/login/index ...

  2. Linux下查找最大文件

    当我们应用一段时间以后,Linux可能会变得臃肿了,那么,怎么找出一个“path”下的最大文件呢? 可以使用du命令,如: du -sh [dirname|filename] 如:当前目录的大小: d ...

  3. Qt学习--部件深入--烤猪蹄

    1,进程条--向用户显示程序的当前状态,向用户提示该任务需要多长时间才能够完成. Qt-ProgressBar创建进程条,QProgressBar,为了使进程条担当起进程指示功能,需要执行定义进程条的 ...

  4. 滴滴专车司机苹果手机ios客户端可以下载了

    申请过滴滴专车司机的朋友都知道,滴滴专车就是滴滴打车的司机端,但是只有安卓的,一直没有苹果IOS的版本,很多申请通过审核的车主恼于没有IOS版本而暂无法使用滴滴专车司机客户端,也就意味着不能上线接单. ...

  5. javaScript滚动新闻之上下左右平滑滚动

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  6. where can I find source of com.android.internal.R.styleable.AlertDialog_multiChoiceItemLayout?

    I want to modify Alert dialog multi select layout. For my program I want two line multi-select item. ...

  7. gulp简单使用小记

    npm install --save-dev 写入package.json里     var gulp = require('gulp'); var less = require('gulp-less ...

  8. InterviewProblems

    package com.xiaoysec; /** * 下面是面试趣医网技术面的时候出现的一个简单的题目 题目的要求是将一个数组中的奇数和偶数进行分离 以奇数在前一部分为例进行解题 * 算法的主要思想 ...

  9. 安装Eclipse Html Editor

    最近在eclipse中开发android项目,用到了jquery mobile框架,则会涉及到新建html文件,发现eclipse不自带新建html文件的插件,必须得新建一个其他形式的文件,譬如xml ...

  10. 将控制台程序做成windows服务

    一:添加windows服务 二:修改XXXInstaller1的StartType=Automatic,修改ProcessInstaller1的Account=LocalSystem 三:在progr ...