接上篇:增删改查

增加:这里不做过多阐述。

删除:删除全部,根据条件删除

修该:先删除,后添加

查询(*):查询所有,精确查询,根据数值范围查询,组合查询,解析查询。

 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入门学习二的更多相关文章

  1. ReactJS入门学习二

    ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...

  2. SpringMVC入门学习(二)

    SpringMVC入门学习(二) ssm框架 springMVC  在上一篇博客中,我简单介绍了一下SpringMVC的环境配置,和简单的使用,今天我们将进一步的学习下Springmvc的操作. mo ...

  3. git入门学习(二):新建分支/上传代码/删除分支

    一.git新建分支,上传代码到新的不同分支  我要实现的效果,即是多个内容的平行分支:这样做的主要目的是方便统一管理属于同一个内容的不同的项目,互不干扰.如图所示: 前提是我的github上已经有we ...

  4. Egg入门学习(二)---理解service作用

    在上一篇文章 Egg入门学习一 中,我们简单的了解了Egg是什么东西,且能做什么,这篇文章我们首先来看看官网对Egg的整个框架的约定如下,及约定对应的目录是做什么的,来有个简单的理解,注意:我也是按照 ...

  5. Lucene入门学习

    技术原理: 开发环境: lucene包:分词包,核心包,高亮显示(highlight和memory),查询包.(下载请到官网去查看,如若下载其他版本,请看我的上篇文档,在luke里面) 原文文档: 入 ...

  6. node入门学习(二)

    一.模块系统 1.创建模块和引用模块 //如何创建一个模块 exports.hello = function(){ console.log('hello worl'); }; //这创建了一个模块 / ...

  7. dubbo入门学习(二)-----dubbo hello world

    一.dubbo hello world入门示例 1.提出需求 某个电商系统,订单服务需要调用用户服务获取某个用户的所有地址: 我们现在需要创建两个服务模块进行测试: 模块 功能 订单服务web模块 创 ...

  8. iOS中 Swift初级入门学习(二)

    // Copyright (c) 2015年 韩俊强. All rights reserved. // import Foundation /* // 控制语句 // for - in // 遍历字符 ...

  9. Objective C 快速入门学习二

    Objective-C 类.对象.方法 1.编写一个复数类: #import <Foundation/Foundation.h>@interface Complex: NSObject / ...

随机推荐

  1. 微信小程序生成指定页面小程序码海报图片分享思路总结

    本博客主要说下思路,具体代码不贴 1.考虑到组件复用,所以我把它做成一个自定义的组件 <my-poster id="getPoster" avater="{{ima ...

  2. OpenCV3 for python3 学习笔记3-----用OpenCV3处理图像一

    本文的内容都与图像处理有关,这时需要修改图像,比如要使用具有艺术性的滤镜.外插(extrapolate)某些部分.分割.粘贴或其他需要的操作. 1.不同色彩空间的的转换 OpenCV有数百种关于在不同 ...

  3. Netty实战 - 1. 基本概念

    1. Netty简介 Netty是由JBOSS提供的一个java开源框架.它提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序.Netty是一个基于NI ...

  4. PHP异步扩展Swoole笔记(1)

    安装Swoole扩展 通过pecl安装, 系统中最好已经有http2依赖, 如果是Ubuntu, 可以直接通过apt安装nghttp2, 如果是Centos或者需要自己编译, 在Github下载ngh ...

  5. Form 组件的学习

    学习链接:http://www.cnblogs.com/haiyan123/p/7778888.html Form组件可以做的几件事情: 1.用户请求数据验证 2.自动生成错误信息 3.打包用户提交的 ...

  6. linux 命令之top

    top命令是显示当前系统正在执行的进程相关信息.包含进程ID.内存占用率等:top命令格式例如以下: top [OPTIONS] OPTIONS: -b 批处理 -c 显示进程的完整名 -I 忽略失效 ...

  7. jQuery(三) javascript跨域问题(JSONP解决)

    加油~ --WH 一.什么是javascript跨域问题? 域:服务器域名,唯一标识(协议,域名,端口)必须保证一致,说明域相同 跨域:在一个服务器上,去访问另一个服务器上,并且得到另一个服务器返回回 ...

  8. [k8s]k8s内容索引

    我会陆陆续续小结下. dns相关 dns策略 1.集群内 2.指定内网 subdomain 3.访问互联网 resovel.conf kube-dns架构图解及策略 nginx-ingress: DN ...

  9. RDLC 根据条件改变背景颜色-多个IIF

    =IIf(Fields!DATE_DIFF.Value < 5 ,"White",IIf(Fields!DATE_DIFF.Value >=5 AND Fields!D ...

  10. 微信redirect_uri域名与后台配置不一致,错误代码10003

    现象 做好了微信公众号扫描登录后,很稳定的运行,后来增加了微信开放平台,结果偶尔就出现了这个redirect_uri错误.然后重启服务器后,又正常. 探查 网上的说法都是网页授权配置的问题,检查微信公 ...