接上篇:增删改查

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

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

修该:先删除,后添加

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

 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. java后台服务器启动脚本

    最近由于经常在项目上线或者调试中启动服务,由于要设置环境变量这些,所以为了方便写了个启动脚本,希望能够帮助大家,也算是给自己做个小笔记: example_project_start.sh: # /bi ...

  2. git关联远程仓库

    git init git add . git commit -m "0.0.1 release" git remote -v git remote add master repos ...

  3. centos7.2重新安装yum

    [root@zf-test-web01-4 ~]# yum install rng-toolsLoaded plugins: fastestmirrorLoading mirror speeds fr ...

  4. MySQL的reset master

    删除index文件中列出的所有二进制日志文件,将index文件清空,并创建一个新的二进制日志文件. 使用这个命令要很小心,以免丢失二进制日志文件数据. reset master也会清空gtid_pur ...

  5. linux内核剖析(八)进程间通信之-管道

    管道 管道是一种两个进程间进行单向通信的机制. 因为管道传递数据的单向性,管道又称为半双工管道. 管道的这一特点决定了器使用的局限性.管道是Linux支持的最初Unix IPC形式之一,具有以下特点: ...

  6. koa中间件机制详解

    转自:https://cnodejs.org/topic/58fd8ec7523b9d0956dad945 koa是由express原班人马打造的一个更小.更富有表现力.更健壮的web框架. 在我眼中 ...

  7. android studio: Rejecting re-init on previously-failed class java.lang.Class<android.support.v4.view.ViewCompat$OnUnhandledKeyEventListenerWrapper>: java.lang.NoClassDefFoundError: Failed resolution o

    今天在运行部署项目时logcat弹出下列错误: -- ::-/? E/Zygote: v2 -- ::-/? I/libpersona: KNOX_SDCARD checking this -- :: ...

  8. 【原创 Hadoop&Spark 动手实践 3】Hadoop2.7.3 MapReduce理论与动手实践

    开始聊MapReduce,MapReduce是Hadoop的计算框架,我学Hadoop是从Hive开始入手,再到hdfs,当我学习hdfs时候,就感觉到hdfs和mapreduce关系的紧密.这个可能 ...

  9. 如何用jQuery获取选中行固定列的数据

    [本文出自天外归云的博客园] 问题:把选中行的ID统计出来,组成一个数组传给后台(选中行的特点:class为danger) 办法如下: // 多选后点击下线按钮 $("#offline&qu ...

  10. nginx转发成功报400 bad request,服务端未收到请求

    nginx转发成功报400 bad request,服务端未收到请求 解决办法: upstream后面不要跟下划线 例如: upstream auth_service{ server 30.4.164 ...