lucene3.6笔记添加搜索功能
lucene为程序添加搜索功能,此功能基于已创建好的文档的索引之上。这里我已经为一些文档建立了索引,并保存到硬盘上。下面开始针对这些索引,添加搜索功能。
1、简单的TermQuery搜索
/**
* 【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转化用户复杂输入,进行与或非查询操作。
/**
* 【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笔记添加搜索功能的更多相关文章
- 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 ...
- dgango中admin下添加搜索功能
admin下添加搜索功能: 在表单中加入search_fields = ['ip','hostname'] 可模糊匹配 当有人在管理搜索框中进行搜索时,Django将搜索查询分解成单词,并返回包含 ...
- layui-treeTable v2.0添加搜索功能
layui-treeTable 添加搜索功能 在树形表格头部加一个input框: <div class="layui-inline"> <input class= ...
- ZKEACMS添加搜索功能,搜索插件说明
ZKEACMS默认是不支持搜索功能的.但是搜索功能是比较常用的一个功能,使用这个搜索插件,可以让CMS支持搜索: 如下图所示: 数据库 Microstft Sql Server 2008R2 以上 页 ...
- 给 hugo 博客添加搜索功能
起因 我的博客使用了 hugo 作为静态生成工具,自带的主题里也没有附带搜索功能.看来,还是得自己给博客添加一个搜索功能. 经过多方查找,从 Hugo Fast Search · GitHub 找到一 ...
- 给jekyll博客添加搜索功能
使用SWIFTYPE为jekyll博客添加搜索引擎 步骤 1.首先去swiftype注册一个账号 2.接着添加自己想要配置的网站地址并为新设定的引擎添加一个名字(非会员只能设置一个引擎). 3.收到验 ...
- WinForm------给GridControl添加搜索功能
//按钮点击事件 private void Btn_Search_Click(object sender, EventArgs e) { //获取编辑框的值 string text = this.te ...
- DevExpress 标题栏添加搜索功能
上图是效果图 附件示例代码下载
- js table的笔记,实现添加 td,实现搜索功能
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
随机推荐
- Oracle EBS-SQL (INV-1):检查物料成本为0并且物料状态不是'NEW'的物料.sql
select --msi.inventory_item_id --,msi.organization_id msi.segment1 ...
- Delphi代码中嵌入ASM代码
前言 Delphi作为一个快速高效的开发平台,使用的人越来越多,但熟悉在Delphi代码中嵌入ASM代码的程序员我想不多,因为这方面的资料太少了,另一方面,它还需要有基本的汇编语言知识,关於汇编语言的 ...
- 【HDU】4923 Room and Moor(2014多校第六场1003)
Room and Moor Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) ...
- 向未声明的 JavaScript 变量来分配值
如果您把值赋给尚未声明的变量,该变量将被自动作为全局变量声明. 这条语句: carname="Volvo"; 将声明一个全局变量 carname,即使它在函数内执行.
- JFinal开发web项目出现故障小记
导读 作为中国优秀的开源项目之中的一个JFinal有着极速开发的优点,是中小型应用开发的首选.在导师的建议下.我使用了JFinal来开发一个Java服务端应用,官方教程非常easy.就几十页(当然是中 ...
- ADT Example
Example Data Types: Integer, and Character Example (Integer Data Type) The integer data type can con ...
- 轻量级C语言实现的minixml解析库入门教程
svn上的minixml源码下载. svn co http://svn.msweet.org/mxml/tags/release-2.7/ 按照下载回来的源代码进行编译和安装.本教程只针对新手做一个 ...
- DevExpress学习1
为了程序的美观设计,决定用dev控件. 第一步,去官网下载了试用30天的安装包,官网地址:https://www.devexpress.com/,安装完成. 第二步,开始程序下找到DevExpress ...
- sql server 存储过程分隔split
CREATE FUNCTION [dbo].[F_split] ( ), ) ) , ), f )) --实现split功能 的函数 AS BEGIN DECLARE @i INT SET @Sour ...
- 解决linux ping: unknown host www.baidu.com(转)
解决方案: 如果某台Linux服务器ping不通域名, 如下提示: [root@localhost ~]# ping www.baidu.comping: unknown host www.ba ...