lucene创建索引以及索引文件合并

  1 package test;
  2
  3 import java.io.File;
  4 import java.io.IOException;
  5 import java.nio.file.Path;
  6 import java.util.ArrayList;
  7 import java.util.List;
  8 import java.util.Map;
  9
 10 import org.apache.lucene.analysis.standard.StandardAnalyzer;
 11 import org.apache.lucene.document.Document;
 12 import org.apache.lucene.document.Field.Store;
 13 import org.apache.lucene.document.StringField;
 14 import org.apache.lucene.index.DirectoryReader;
 15 import org.apache.lucene.index.IndexReader;
 16 import org.apache.lucene.index.IndexWriter;
 17 import org.apache.lucene.index.IndexWriterConfig;
 18 import org.apache.lucene.store.Directory;
 19 import org.apache.lucene.store.FSDirectory;
 20
 21 public class IndexCreate {
 22     public static void main(String[] args) {
 23 //        makeIndexs();
 24         mergeIndexFiles();
 25         searchIndexFileSize();
 26
 27     }
 28
 29     /**
 30      * 创建索引
 31      */
 32     public static void makeIndexs() {
 33         String sql = " select * from (select rownum r,t.* from TB_MENU t) m where m.r>=15 ";
 34         OracleDBUtils db = new OracleDBUtils();
 35         List<String> list = new ArrayList<String>();
 36         list.add("ID");
 37         list.add("MENUTYPE");
 38         list.add("MENUNAME");
 39         list.add("URL");
 40         list.add("ICONPATH");
 41         List<Map<String, Object>> res = db.exec(sql, list);
 42         /**
 43          * 创建索引文件
 44          */
 45         IndexWriter writer = null;
 46         Directory directory = null;
 47         try {
 48             Path path = new File("D:/temp").toPath();
 49             directory = FSDirectory.open(path);
 50             writer = new IndexWriter(directory, new IndexWriterConfig(
 51                     new StandardAnalyzer()));
 52             for (Map<String, Object> map : res) {
 53                 Document doc = new Document();
 54                 for (String key : list) {
 55                     String value = map.get(key) == null ? "" : map.get(key)
 56                             .toString();
 57                     doc.add(new StringField(key, value, Store.YES));
 58                 }
 59                 writer.addDocument(doc);
 60             }
 61         } catch (IOException e) {
 62             e.printStackTrace();
 63         } finally {
 64             try {
 65                 writer.commit();
 66                 writer.close();
 67                 directory.close();
 68                 System.out.println("索引创建成功!");
 69             } catch (IOException e) {
 70                 e.printStackTrace();
 71             }
 72
 73         }
 74     }
 75
 76     /**
 77      * 合并索引文件
 78      */
 79     public static void mergeIndexFiles() {
 80         IndexWriter writer = null;
 81         Directory directory = null;
 82         Directory tempDir = null;
 83         try {
 84             Path path = new File("D:/luceneDir").toPath();
 85             directory = FSDirectory.open(path);
 86             Path temp = new File("D:/temp").toPath();
 87             tempDir = FSDirectory.open(temp);
 88             writer = new IndexWriter(directory,
 89                     new IndexWriterConfig(new StandardAnalyzer()));
 90             writer.addIndexes(tempDir);
 91             writer.commit();
 92         } catch (IOException e) {
 93             e.printStackTrace();
 94         } finally{
 95             try {
 96                 writer.close();
 97                 directory.close();
 98                 tempDir.close();
 99                 System.out.println("索引文件合并成功!");
100             } catch (IOException e) {
101                 e.printStackTrace();
102             }
103         }
104     }
105
106     public static void searchIndexFileSize() {
107         Directory directory = null;
108         try {
109             Path path = new File("D:/luceneDir").toPath();
110             directory = FSDirectory.open(path);
111             IndexReader reader=DirectoryReader.open(directory);
112             System.out.println(reader.maxDoc());
113         } catch (IOException e) {
114             e.printStackTrace();
115         } finally{
116             try {
117                 directory.close();
118             } catch (IOException e) {
119                 e.printStackTrace();
120             }
121         }
122     }
123 }

结果如下:

时间: 2024-09-30 13:29:22

lucene创建索引以及索引文件合并的相关文章

Lucene.net(4.8.0) 学习问题记录三: 索引的创建 IndexWriter 和索引速度的优化

前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3.6.0 ,PanGu分词也是对应Lucene3.6.0版本的.不过好在Lucene.net 已经有了Core 2.0版本(4.8.0 bate版),而PanGu分词,目前有人正在做,貌似已经做完,只是还没有测试~,Lucene升级的改变我都会加粗表示. Lucene.net 4.8.0 https

lucene写索引出现锁文件的原因之一

lucene正常情况目录下的文件 有三个文件. segments.gen segments_a08, 还有一个类似 _uw.cfs名字的东西. 当然,不一定都一样, 但肯定是这三个. 如果出现了很多文件.不要着急, 看下面的 . 如果lucene的索引目录下出现了很多文件, 肯定是有问题的. 几个方面.首先lucene在执行写操作时, 会先在目录下写如一个write.lock的文件锁定这个目录,以避免别的索引再操作这个路径. 否则那样肯定会乱. 锁定之后, 开始写索引, 写索引时lucene建了

基础:从概念理解Lucene的Index(索引)文档模型

转:http://blog.csdn.net/duck_genuine/article/details/6053430 目录(?)[+] Lucene主要有两种文档模型:Document和Field,一个Document可能包含若干个Field. 每一个Field有不同的策略: 1.被索引 or not,将该字段(Field)经过分析(Analyisi)后,加入索引中,并不是原文 . 2.如果被索引,可选择是否保存“term vector”(向量),用于相似检索. 3.可选择是否存储(store

大数据技术之_20_Elasticsearch学习_01_概述 + 快速入门 + Java API 操作 + 创建、删除索引 + 新建、搜索、更新删除文档 + 条件查询 + 映射操作

一 概述1.1 什么是搜索?1.2 如果用数据库做搜索会怎么样?1.3 什么是全文检索和 Lucene?1.4 什么是 Elasticsearch?1.5 Elasticsearch 的适用场景1.6 Elasticsearch 的特点1.7 Elasticsearch 的核心概念1.7.1 近实时1.7.2 Cluster(集群)1.7.3 Node(节点)1.7.4 Index(索引 --> 数据库)1.7.5 Type(类型 --> 表)1.7.6 Document(文档 -->

创建高性能的索引

索引可以包含一个或多个列的值.若索引包含多个列,那么列的顺序也十分重要,因为MySQL只能高效的使用索引的最左前缀列. 在MySQL中,索引是在存储引擎层而不是服务层实现的,所以并没有统一的索引标准.不同存储引擎的索引的工作方式并不一样,也不是所有的存储引擎都支持所有类型的索引.即使多个存储引擎支持同一种类型的索引,其底层的实现也可能不同. B-Tree索引 若没有指定特定类型的索引,则一般都是指的是B-Tree索引,它使用B-Tree数据结构来存储数据.InnoDB使用的是B+Tree.MyI

MySQL 索引知识整理(创建高性能的索引)

前言: 索引优化应该是对查询性能优化的最有效的手段了.索引能够轻易将查询性能提高几个数量级. // 固态硬盘驱动器有和机械硬盘启动器,有着完全不同的性能特性: 然而即使是固态硬盘,索引的原则依然成立, 只是那些需要尽量避免的糟糕索引对固态硬盘的影响没有机械硬盘那么糟糕. 现在很多公司都将数据库的优化工作都依托于 DBA 去完成,在我看来,这些都应该是程序员必备的技能, 有经验和没经验的程序员在数据库使用起来也有很大的差异,这些差异取决开发人员对索引内部的数据结构认识, 对所有负责的业务熟悉程度,

创建非聚集索引

创建非聚集索引 SQL Server 2014 其他版本 2(共 2)对本文的评价是有帮助 - 评价此主题 您可以使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 2014 中创建非聚集索引. 非聚集索引是一种与存储在表中的数据相分离的索引结构,可对一个或多个选定列重新排序. 非聚集索引通常可帮助您通过比搜索基础表更快的速度查找数据:有时可以完全由非聚集索引中的数据回答查询,或非聚集索引可将数据库引擎指向基础表中的行. 一般来

《高性能MySQL》读书笔记之创建高性能的索引

索引是存储引擎用于快速找到记录的一种数据结构.索引优化是对查询性能优化的最有效手段.索引能够轻易将查询性能提高几个数量级.创建一个最优的索引经常需要重写查询.5.1 索引基础 在MySQL中,存储引擎首先在索引中找到对应值,然后根据匹配的索引记录找到对应的数据行. 索引可以包含一个或多个列的值.如果索引包含多个列,那么列的顺序也十分重要,因为MySQL只能高效地使用索引的最左前缀列. 5.1.1 索引的类型 索引有很多类型,可以为不同的场景提供更好的性能.在MySQL中,索引是在储存引擎层而不是

目录、目录项、超级块、索引节点、文件

unix中,文件系统被安装在一个特定的安装节点上,该安装点在全局层次结构中被称为命名空间,所有已安装的文件系统都作为根文件系统树的枝叶出现在系统中.本质讲,文件系统是特殊的数据分层存储结构,包含文件.目录和相关的控制信息. 目录: 1.作用:文件是通过目录组织起来的,目录相当于文件夹,用来容纳对应的文件 2.一个例子: /home/csj/1.c 什么是目录,分析一下上面的例子. 根目录 / 这个名词应该都不陌生,后面的 home表示家目录,csj也表示目录,最后的1.c表示一个程序文件 3.上