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. Oracle EBS-SQL (INV-1):检查物料成本为0并且物料状态不是'NEW'的物料.sql

    select --msi.inventory_item_id        --,msi.organization_id     msi.segment1                        ...

  2. Delphi代码中嵌入ASM代码

    前言 Delphi作为一个快速高效的开发平台,使用的人越来越多,但熟悉在Delphi代码中嵌入ASM代码的程序员我想不多,因为这方面的资料太少了,另一方面,它还需要有基本的汇编语言知识,关於汇编语言的 ...

  3. 【HDU】4923 Room and Moor(2014多校第六场1003)

    Room and Moor Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) ...

  4. 向未声明的 JavaScript 变量来分配值

    如果您把值赋给尚未声明的变量,该变量将被自动作为全局变量声明. 这条语句: carname="Volvo"; 将声明一个全局变量 carname,即使它在函数内执行.

  5. JFinal开发web项目出现故障小记

    导读 作为中国优秀的开源项目之中的一个JFinal有着极速开发的优点,是中小型应用开发的首选.在导师的建议下.我使用了JFinal来开发一个Java服务端应用,官方教程非常easy.就几十页(当然是中 ...

  6. ADT Example

    Example Data Types: Integer, and Character Example (Integer Data Type) The integer data type can con ...

  7. 轻量级C语言实现的minixml解析库入门教程

    svn上的minixml源码下载.  svn co http://svn.msweet.org/mxml/tags/release-2.7/ 按照下载回来的源代码进行编译和安装.本教程只针对新手做一个 ...

  8. DevExpress学习1

    为了程序的美观设计,决定用dev控件. 第一步,去官网下载了试用30天的安装包,官网地址:https://www.devexpress.com/,安装完成. 第二步,开始程序下找到DevExpress ...

  9. sql server 存储过程分隔split

    CREATE FUNCTION [dbo].[F_split] ( ), ) ) , ), f )) --实现split功能 的函数 AS BEGIN DECLARE @i INT SET @Sour ...

  10. 解决linux ping: unknown host www.baidu.com(转)

    解决方案:    如果某台Linux服务器ping不通域名, 如下提示: [root@localhost ~]# ping www.baidu.comping: unknown host www.ba ...