Lucene入门学习二
接上篇:增删改查
增加:这里不做过多阐述。
删除:删除全部,根据条件删除
修该:先删除,后添加
查询(*):查询所有,精确查询,根据数值范围查询,组合查询,解析查询。
package com.itheima.luncence; import java.io.File;
import java.io.IOException; import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.Term;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.BooleanClause.Occur;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.MatchAllDocsQuery;
import org.apache.lucene.search.NumericRangeQuery;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.junit.Test;
import org.wltea.analyzer.lucene.IKAnalyzer; /**
*
* @author jack cheng
*
*/
public class LuceneManager { //公共部分保存到索引库
public IndexWriter getIndexWriter() throws Exception{
// 1、创建Directory
// JDK 1.7以后 open只能接收Path
Directory directory = FSDirectory.open(new File("D:\\BaiduYunDownload\\index"));
// 2、创建IndexWriter
Analyzer analyzer = new StandardAnalyzer();
IndexWriterConfig config = new IndexWriterConfig(Version.LATEST, analyzer);
IndexWriter indexWriter = new IndexWriter(directory, config);//************
//indexWriter.deleteAll();// 清除以前的index
return indexWriter;
} //全删除
@Test
public void deleteAll() throws Exception{
IndexWriter writer = getIndexWriter();
writer.deleteAll();
writer.close();
System.out.println("删除成功");
}
//根据条件删除
@Test
public void deleteBy() throws Exception{
IndexWriter writer = getIndexWriter();
Query query = new TermQuery(new Term("filename", "apache"));
writer.deleteDocuments(query);;
writer.close();
System.out.println("删除成功2");
} //修该
@Test
public void update() throws Exception{
IndexWriter writer = getIndexWriter();
Document doc = new Document();
doc.add(new TextField("fileN", "测试文件名",Store.YES));
doc.add(new TextField("fileC", "测试文件内容",Store.YES));
writer.updateDocument(new Term("filename", "lucene"), doc, new IKAnalyzer());//删除第一个,加入第二个 writer.close();
System.out.println("修该成功");
}
//***************************************************************************
//公共部分读取索引库方法
public IndexSearcher getIndexSearcher() throws Exception{
//创建索引库
Directory directory = FSDirectory.open(new File("D:\\BaiduYunDownload\\index"));
//创建indexreader
IndexReader indexReader = DirectoryReader.open(directory);
//创建Searcher
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
return indexSearcher; } //结果显示(公共部分)
public void printResult(IndexSearcher indexSearcher,Query query) throws Exception{
TopDocs topDocs = indexSearcher.search(query, 20);
int totalHits = topDocs.totalHits;
System.out.println("记录数" + totalHits);
// 6、根据TopDocs获取ScoreDoc对象
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
for (ScoreDoc scoreDoc : scoreDocs) { // 7、根据searcher和ScoreDoc对象获取具体的Document对象
Document document = indexSearcher.doc(scoreDoc.doc); // 8、根据Document对象获取需要的值
System.out.println("文件名:" + document.get("filename")
+ " " + "文件路径:" + document.get("filepath")
+ "文件大小:"+ document.get("filesize")
+ "文件内容:" + document.get("content"));
System.out.println("-----------------------------------------");
} } //查询所有
@Test
public void testAll() throws Exception{
IndexSearcher indexSearcher =getIndexSearcher();
Query query = new MatchAllDocsQuery();
printResult(indexSearcher, query);
//关闭流
indexSearcher.getIndexReader().close();
} //更具数据范围查询
@Test
public void testnumber() throws Exception{
IndexSearcher indexSearcher =getIndexSearcher();
Query query = NumericRangeQuery.newLongRange("filesize", 400l, 1000000l, true, true);
printResult(indexSearcher, query);
//关闭流
indexSearcher.getIndexReader().close();
} //组合查询
@Test
public void Booleanquery() throws Exception{
IndexSearcher indexSearcher =getIndexSearcher();
BooleanQuery booleanquery = new BooleanQuery();
TermQuery query2 = new TermQuery(new Term("filename","changes"));
TermQuery query1 = new TermQuery(new Term("content","changes"));
booleanquery.add(query2,Occur.MUST);
booleanquery.add(query1,Occur.MUST);
printResult(indexSearcher, booleanquery);
//关闭流
indexSearcher.getIndexReader().close();
} //解析查询(多看文档)
@Test
public void testqueryparser() throws Exception{
IndexSearcher indexSearcher =getIndexSearcher(); QueryParser queryParser = new QueryParser("filename",new IKAnalyzer());
//Query query =queryParser.parse("*:*");//查询条件(查询所有)
Query query =queryParser.parse("changes");
printResult(indexSearcher, query);
//关闭流
indexSearcher.getIndexReader().close();
}
}
Lucene入门学习二的更多相关文章
- ReactJS入门学习二
ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...
- SpringMVC入门学习(二)
SpringMVC入门学习(二) ssm框架 springMVC 在上一篇博客中,我简单介绍了一下SpringMVC的环境配置,和简单的使用,今天我们将进一步的学习下Springmvc的操作. mo ...
- git入门学习(二):新建分支/上传代码/删除分支
一.git新建分支,上传代码到新的不同分支 我要实现的效果,即是多个内容的平行分支:这样做的主要目的是方便统一管理属于同一个内容的不同的项目,互不干扰.如图所示: 前提是我的github上已经有we ...
- Egg入门学习(二)---理解service作用
在上一篇文章 Egg入门学习一 中,我们简单的了解了Egg是什么东西,且能做什么,这篇文章我们首先来看看官网对Egg的整个框架的约定如下,及约定对应的目录是做什么的,来有个简单的理解,注意:我也是按照 ...
- Lucene入门学习
技术原理: 开发环境: lucene包:分词包,核心包,高亮显示(highlight和memory),查询包.(下载请到官网去查看,如若下载其他版本,请看我的上篇文档,在luke里面) 原文文档: 入 ...
- node入门学习(二)
一.模块系统 1.创建模块和引用模块 //如何创建一个模块 exports.hello = function(){ console.log('hello worl'); }; //这创建了一个模块 / ...
- dubbo入门学习(二)-----dubbo hello world
一.dubbo hello world入门示例 1.提出需求 某个电商系统,订单服务需要调用用户服务获取某个用户的所有地址: 我们现在需要创建两个服务模块进行测试: 模块 功能 订单服务web模块 创 ...
- iOS中 Swift初级入门学习(二)
// Copyright (c) 2015年 韩俊强. All rights reserved. // import Foundation /* // 控制语句 // for - in // 遍历字符 ...
- Objective C 快速入门学习二
Objective-C 类.对象.方法 1.编写一个复数类: #import <Foundation/Foundation.h>@interface Complex: NSObject / ...
随机推荐
- 用SublimeText当Unity Shader的编辑器
用Visual Studio写shader实在蛋疼,那可能就会有人要问了,为啥不用插件可视化制作shader呢?因为我是新手,新手还是老老实实敲代码,慢慢来- 所以试着在网上找找,有没有类似的插件或者 ...
- 版本控制:tortoise svn的 revert to this revision和 revert changes from this revision有什么区别?
问题: The link: http://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-howto-rollback.html describes ...
- flink 有状态udf 引起血案一
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/rlnLo2pNEfx9c/article/details/83422587 场景 近期在做一个画像的 ...
- 配置带用户权限的docker registry v2
v1版本的docker registry用nginx配置,v2版本的用nginx有些问题,客户端总是会请求到v1/下面去, 以下从 http://blog.csdn.net/felix_yujing/ ...
- DroneCI启用privileged
https://www.aliyun.com/jiaocheng/123155.html?spm=5176.100033.2.5.EIV4p6 drone的服务需要配置DRONE_ADMIN环境变量, ...
- 转发:entos7修改文件夹权限和用户名用户组
Linux系统下经常遇到文件或者文件夹的权限问题,或者是因为文件夹所属的用户问题而没有访问的权限.根据我自己遇到的情况,对这类问题做一个小结.在命令行使用命令“ll”或者“ls -a”,可以查看文件或 ...
- [Java] zjdbcping:JDBC数据库连接测试工具
作者: zyl910 一.缘由 当数据库服务器很多时,或者要与第三方公司做数据库表交换时,此时觉得若有一个简单快捷的数据库连接测试工具就好了. 因为若是采取直接把程序部署到tomcat等容器再测试的办 ...
- PowerShe 消息提示框测试
1. 使用powerShell 弹出一个简单的消息框,代码如下,创建test.ps1脚本文件. $ConfirmPreference = 'None' $ws = New-Object -ComObj ...
- MATLAB 统计不同区间中元素的个数
使用 find 命令: x = :;%生成数组 k = find( x > & x < );%查找大于2小于5的元素的数组下标 size(k,) %统计的元素的个数
- 【Android】解析Paint类中Xfermode的使用
Paint类提供了setXfermode(Xfermode xfermode)方法,Xfermode指明了原图像和目标图像的结合方式.谈到Xfermode就不得不谈它的派生类PorterDuffXfe ...