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. getHibernateTemplate().find()

    find(String queryString, Object[] values); 这个方法后者的参数必须是一个数组,而不能是一个List. List ul=getHibernateTemplate ...

  2. QT里嵌入Python

    刚看到一个软件,叫做,明明是QT做的,却带了很多pyd文件(Python编译后的文件),上网一查,果然有这套相关的东西: https://doc.qt.io/archives/qq/qq23-pyth ...

  3. JavaScript实现定点圆周运动

    目是这样的:假设有一定点(400px,300px),通过JavaScript使一个直径20px的圆点以 r=180px 为半径围绕该点做匀速圆周运动. 这个问题的整体实现思想应该是这样的,看到“半径” ...

  4. docker导入本地镜像

    -rw-r--r-- 1 root root 98954220 Mar 17 17:02 centos-6-x86.tar.gz 利用下载的包 创建镜像: cat centos-6-x86.tar.g ...

  5. 在eclipse中怎么安装插件

    1.方法1是help中安装新软件,这个一般要你真到软件的url,如果不知道呢?那么就要用到marketpalce,这个一般也在help中的,

  6. js charts去掉logo

    打开js charts 3的源代码搜索关键字"fs.bg",然后会找到 fs.bg.2v(fX),将这句代码删掉就OK了,可能有的版本会是fs.bg.2u(fX) 欢迎加入群:25 ...

  7. Android API Level在11前后及16之后时Notification的不同用法

    作为刚入门Android的小白,最近在按照郭大神的<第一行代码>在练习,在用到Notification时遇到了一些问题,网上资料比较零散,我这里做了一个总结分析给各位,若有错误,恳请指正~ ...

  8. MSSQL查询连接数

    SELECT * FROM [Master].[dbo].[SYSPROCESSES] WHERE [DBID] IN ( SELECT [DBID] FROM [Master].[dbo].[SYS ...

  9. sql server 存储过程、事务,增删改

    CREATE procedure [dbo].[sp_TableSave] @TypeID tinyint, -- 0 新增,1 修改,2 删除 @ID int, ), ), ), @UID int, ...

  10. poj 2001 Shortest Prefixes

    字典树的简单应用. #include<stdio.h> #include<string.h> ][]; struct node{ int cnt; node *next[]; ...