IndexManager.java

package com.witwicky.lucene;

import java.io.File;
import java.util.ArrayList;
import java.util.List; import org.apache.commons.io.FileUtils;
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.LongField;
import org.apache.lucene.document.TextField;
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.Query;
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; /**
*
* Lucene索引管理
*
* @author Administrator
*
*/
public class IndexManager { /**
* 创建索引
*
* @throws Exception
*/
@Test
public void IndexCreate() throws Exception { String dataPath = "D:\\Lucene\\searchsource";
String indexPath = "D:\\Lucene\\dic"; // 文档集合
List<Document> listDocument = new ArrayList<>(); // 读取文件,创建Document列表
File file = new File(dataPath);
for (File f : file.listFiles()) {
String fileName = f.getName();
String fileContent = FileUtils.readFileToString(f);
long fileSize = FileUtils.sizeOf(f); // 创建文档
Document doc = new Document();
doc.add(new TextField("fileName", fileName, Store.YES));
doc.add(new TextField("fileContent", fileContent, Store.YES));
doc.add(new LongField("fileSize", fileSize, Store.YES)); // 放入文档列表
listDocument.add(doc);
} // 创建分词器
// Analyzer analyzer = new StandardAnalyzer();
Analyzer analyzer = new IKAnalyzer(); // 创建写入目录
Directory directory = FSDirectory.open(new File(indexPath));
// 创建写入索引对象的配置对象
IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_4_10_3, analyzer);
// 创建写索引对象
IndexWriter indexWriter = new IndexWriter(directory, indexWriterConfig); // 将文档添加入写入索引对象的流中
for (Document document : listDocument) {
indexWriter.addDocument(document);
} // 提交
indexWriter.commit(); // 关闭流
indexWriter.close();
} /**
* 删除索引
*/
@Test
public void delIndex() throws Exception {
Analyzer analyzer = new IKAnalyzer();
// Analyzer analyzer = new StandardAnalyzer(); Directory directory = FSDirectory.open(new File("D:\\Lucene\\dic"));
IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_4_10_3, analyzer);
IndexWriter indexWriter = new IndexWriter(directory, indexWriterConfig); // 删除所有
indexWriter.deleteAll(); // 根据域删除
// 1.
// QueryParser queryParser = new QueryParser("fileName", analyzer);
// Query query = queryParser.parse("fileName:apache");
// indexWriter.deleteDocuments(term); // 2.
// Term term = new Term("fileName", "java");
// indexWriter.deleteDocuments(term); indexWriter.commit();
indexWriter.close();
} /**
* 更新索引
*
* @throws Exception
*/
@Test
public void updateIndex() throws Exception {
Analyzer analyzer = new IKAnalyzer();
// Analyzer analyzer = new StandardAnalyzer(); Directory directory = FSDirectory.open(new File("D:\\Lucene\\dic"));
IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_4_10_3, analyzer);
IndexWriter indexWriter = new IndexWriter(directory, indexWriterConfig); Term term = new Term("fileName", "adsf");
Document doc = new Document();
doc.add(new TextField("fileName", "adsf", Store.YES));
doc.add(new TextField("fileContent", "vvvvvvvvvvvvvvv", Store.YES));
doc.add(new LongField("fileSize", 200L, Store.YES)); indexWriter.updateDocument(term, doc); indexWriter.commit();
indexWriter.close();
}
}

  

IndexSearch.java

package com.witwicky.lucene;

import java.io.File;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.junit.Test;
import org.wltea.analyzer.lucene.IKAnalyzer; public class IndexSearch { /**
* 索引搜索
*/
@Test
public void indexSearch() throws Exception {
String indexPath = "D:\\Lucene\\dic"; // 分词器
// Analyzer analyzer = new StandardAnalyzer();
Analyzer analyzer = new IKAnalyzer(); // 查询解析对象
QueryParser queryParser = new QueryParser("fileName", analyzer);
Query query = queryParser.parse("fileName:apache"); Directory directory = FSDirectory.open(new File(indexPath));
IndexReader indexReader = DirectoryReader.open(directory); IndexSearcher indexSearcher = new IndexSearcher(indexReader); TopDocs topDocs = indexSearcher.search(query, 10); System.out.println("总记录数:" + topDocs.totalHits); ScoreDoc[] scoreDocs = topDocs.scoreDocs; for (ScoreDoc scoreDoc : scoreDocs) {
Document doc = indexSearcher.doc(scoreDoc.doc); System.out.println("名称:" + doc.get("fileName"));
// System.out.println("内容:" + doc.get("fileContent"));
System.out.println("大小:" + doc.get("fileSize"));
} indexReader.close();
}
}

  

Lucene增删改查的更多相关文章

  1. 【ES】ElasticSearch初体验之使用Java进行最基本的增删改查~

    好久没写博文了, 最近项目中使用到了ElaticSearch相关的一些内容, 刚好自己也来做个总结. 现在自己也只能算得上入门, 总结下自己在工作中使用Java操作ES的一些小经验吧. 本文总共分为三 ...

  2. Elasticsearch之文档的增删改查以及ik分词器

    文档的增删改查 增加文档 使用elasticsearch-head查看 修改文档 使用elasticsearch-head查看 删除文档 使用elasticsearch-head查看 查看文档的三种方 ...

  3. Es图形化软件使用之ElasticSearch-head、Kibana,Elasticsearch之-倒排索引操作、映射管理、文档增删改查

    今日内容概要 ElasticSearch之-ElasticSearch-head ElasticSearch之-安装Kibana Elasticsearch之-倒排索引 Elasticsearch之- ...

  4. Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示

    Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下: 完整Demo:http://pan.baidu.com/s/1i3TcEzj 注 意 事 项:http:// ...

  5. ASP.NET从零开始学习EF的增删改查

           ASP.NET从零开始学习EF的增删改查           最近辞职了,但是离真正的离职还有一段时间,趁着这段空档期,总想着写些东西,想来想去,也不是很明确到底想写个啥,但是闲着也是够 ...

  6. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(9)-MVC与EasyUI结合增删改查

    系列目录 文章于2016-12-17日重写 在第八讲中,我们已经做到了怎么样分页.这一讲主要讲增删改查.第六讲的代码已经给出,里面包含了增删改,大家可以下载下来看下. 这讲主要是,制作漂亮的工具栏,虽 ...

  7. 通过Java代码实现对数据库的数据进行操作:增删改查

    在写代码之前,依然是引用mysql数据库的jar包文件:右键项目-构建路径-设置构建路径-库-添加外部JAR 在数据库中我们已经建立好一个表xs :分别有xuehao  xingming    xue ...

  8. Hibernate全套增删改查+分页

    1.创建一个web工程 2.导入jar包 3.创建Student表 4.创建实体类 package com.entity; public class Student { private Integer ...

  9. 使用 Json.Net 对Json文本进行 增删改查

    JSON 已经成为当前主流交互格式, 如何在C#中使用 Json.Net 对Json文本进行 增删改查呢?见如下代码 #region Create (从零创建) public static strin ...

随机推荐

  1. 微信小程序 template添加点击事件

    介绍template是微信小程序提供的模板,可以在模板中定义代码片段,然后在不同的地方调用. 简单使用定义template因为项目中可能会需要到不止一个template,所以最好新建一个文件夹来存放t ...

  2. 批量修改Mysql数据库表Innodb为MyISAN

    mysql -uroot -e "SELECT concat('ALTER TABLE ', TABLE_NAME,' ENGINE=MYISAM;') FROM Information_s ...

  3. ansible 批量推送公钥

    这里我们使用ansible的playbook 的功能来推送秘钥 使用方法参见:http://blog.csdn.net/magedu_linux/article/details/48529645 这里 ...

  4. springBoot bean注入

    1.@Component:把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/> 2.@Autow ...

  5. 冰淇淋三明治 (Android 4.0)介绍

    原文:http://android.eoe.cn/topic/summary 冰淇淋三明治 (Android 4.0) 是 Android 在设计上的一个里程碑.它将 Honeycomb 提供给平板的 ...

  6. Android Studio 通过 git update 或者 pull 的时候出错及解决办法

    Android Studio 通过 git update 或者 pull 的时候出错,log 如下: Couldn't save uncommitted changes. Tried to save ...

  7. 使用Delaunay三角剖分解决求多边形面积的问题

    朋友那边最近有个需求,需要框选一个选区,然后根据选区中的点求出面积.并且让我尝试用Delaunay来解决 似乎音译过来应该是德诺类 大致如下: 我在github上找了一个可以用的Delaunay库 h ...

  8. 不应直接存储或返回可变成员 Mutable members should not be stored or returned directly

    Mutable objects are those whose state can be changed. For instance, an array is mutable, but a Strin ...

  9. [na]计算机网络性能指标(延迟/吞吐量/RTT等)

    参考 计算机网络性能指标 计算机网络性能指标 带宽.速率.延迟.吞吐量.丢包率(无线验收标准一般-75dbm,del<100ms,丢包率3%) 带宽x延迟 决定着路上的数据的多少. 速率: 连接 ...

  10. nginx 前端调度 对后端的app的生存状态的检测

    # cat hosts.conf #app调试 upstream gl-appsrv_pools { server 10.1x0.2xx.1x0:8040; server 10.x9x.20.208: ...