接上篇:增删改查

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

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

修该:先删除,后添加

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

 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. 关于snowflake算法生成的ID转换为JS的数字类型由于过大导致JS精度丢失的问题

    JS的数字类型目前支持的最大值为:9007199254740992,一旦数字超过这个值,JS将会丢失精度,导致前后端的值出现不一致. JAVA的Long类型的       最大值为:922337203 ...

  2. 使用Træfɪk(traefik)来加速Qt在线更新

    简述 在使用Qt的MaintenanceTool程序进行在线更新的时候遇到一个问题,就是访问download.qt.io实在太慢了,老是失败.所以想使用国内的镜像站来进行更新. 使用Qt的镜像站方法也 ...

  3. EntityFramework.Extended 对EF进行扩展

    前言 Entity Framework 延伸系列目录 今天我们来讲讲EntityFramework.Extended 首先科普一下这个EntityFramework.Extended是什么,如下: 这 ...

  4. GOF提出的23种设计模式是哪些 设计模式有创建形、行为形、结构形三种类别 常用的Javascript中常用设计模式的其中17种 详解设计模式六大原则

    20151218mark 延伸扩展: -设计模式在很多语言PHP.JAVA.C#.C++.JS等都有各自的使用,但原理是相同的,比如JS常用的Javascript设计模式 -详解设计模式六大原则 设计 ...

  5. MVC Json方法里的一个坑

    MVC Controller类下面有这样一个方法 // // Summary: // Creates a System.Web.Mvc.JsonResult object that serialize ...

  6. 深入理解Java String类(综合)

    在Java语言了中,所有类似“ABC”的字面值,都是String类的实例:String类位于java.lang包下,是Java语言的核心类,提供了字符串的比较.查找.截取.大小写转换等操作:Java语 ...

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

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

  8. AspectF写法

    AspectF.Define .ProgressBar(caption) .Do(() => { if (!SpecialMenuClick(midForm, tag)) { DockBarSh ...

  9. Django Rest Framework(认证、权限、限制访问频率)

    阅读原文Django Rest Framework(认证.权限.限制访问频率) django_rest_framework doc django_redis cache doc

  10. HTTPS和SSL握手过程(转载)

    https介绍 HTTPS = HTTP + 一组对称.非对称和基于证书的加密技术 HTTPS是最常见的HTTP安全版本.它得到了很广泛的应用,所有主要的商业浏览器和服务器都提供HTTPS.HTTPS ...