接上篇:增删改查

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

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

修该:先删除,后添加

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

 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. Maven中classifier

    1.classifier概述 classifier通常用于区分从同一POM构建的具有不同内容的构件(artifact).它是可选的,它可以是任意的字符串,附加在版本号之后. 2.使用场景 场景一:区分 ...

  2. fashion datasets图像检索实践project

    Using Siamese Networks and Pre-Trained Convolutional Neural Networks (CNNs) for Fashion Similarity M ...

  3. 【ASP.NET Core】从向 Web API 提交纯文本内容谈起

    前些时日,老周在升级“华南闲肾回收登记平台”时,为了扩展业务,尤其是允许其他开发人员在其他平台向本系统提交有关肾的介绍资料,于是就为该系统增加了几个 Web API. 其中,有关肾的介绍采用纯文本方式 ...

  4. memcache源码编译安装

    问题描述: memcached未授权漏洞.运行账户root,对未授权,官方也没有账户认证,也想不明白,为啥不搞个账户认证memcached..... 问题解决: 未授权,网上大部分通过防火墙实现对未知 ...

  5. web项目 在visual studio 输出窗口显示调试信息

    //始终显示 Trace.WriteLine(“要显示的调试信息”); //调试时显示 Debug.WriteLine(“要显示的调试信息”);

  6. Centos7.4修改主机名HostName颜色及格式

    一.打开 .bashrc文件 1.位置:~(cd ~)目录下 2.cat .bashrc 原文件内容如下: # .bashrc # User specific aliases and function ...

  7. 转:一千行MYSQL 笔记

    原文地址: https://shockerli.net/post/1000-line-mysql-note/ /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ ...

  8. Django模版基本标签详解

    一.if/else{% if %} 标签检查(evaluate)一个变量,如果这个变量为真(即,变量存在,非空,不是布尔值假),系统会显示在 {% if %} 和 {% endif %} 之间的任何内 ...

  9. There is a chart instance already initialized on the dom!警告

    使用Echarts插件的时候,多次加载会出现There is a chart instance already initialized on the dom.这个错误,改插件已经加载完成. 并且如果你 ...

  10. haproxy+keepalived(涵盖了lvs,nginx.haproxy比较)

    文章转载自: haproxy+keepalived    https://cloud.tencent.com/developer/article/1026385 网络四层和七层的区别   https: ...