使用RAMDirectory 和 FSDirectory对于索引创建的优化

/*

* 这里使用的是索引的优化

* 这里有话使用的是对于FSDirectory和RAMDirectory的路径的选择,

* FSDirectory使用的是系统磁盘上文件的路径

* 而RAMDiectory使用的是内存中的路径

* RAM的不可以永久保存

* 下面的代码就是分别演示这两种建立存储索引的方法。

* */

package merge;

import java.io.IOException;

import org.apache.lucene.analysis.standard.StandardAnalyzer;

import org.apache.lucene.document.Document;

import org.apache.lucene.document.Field;

import org.apache.lucene.index.IndexWriter;

import org.apache.lucene.store.Directory;

import org.apache.lucene.store.FSDirectory;

import org.apache.lucene.store.RAMDirectory;

public class MergeIndex {

//创建索引的路径

private String INDEX_PATH = "E:\\Lucene项目\\索引路径";

//声明一个RAMDirectory对象

RAMDirectory ramDir = null;

//声明一个FSDirectory对象

FSDirectory fsDir = null;

public MergeIndex(){

System.out.println("============程序开始了=========");

try{

System.out.println("创建ram索引目录--------------->>>");

ramDir = new RAMDirectory();

System.out.println("创建fs索引目录---------------->>>");

fsDir = FSDirectory.getDirectory(INDEX_PATH, true);

System.out.println("创建索引器 1 ----------------->>>");

//构建一个索引器,并以文件系统目录为其目标目录

IndexWriter fsWriter = new IndexWriter(fsDir, new StandardAnalyzer(), true);

System.out.println("创建索引器 2 ----------------->>>");

//构建一个索引器,并以内存作为目标路径

IndexWriter ramWriter = new IndexWriter(ramDir, new StandardAnalyzer(), true);

System.out.println("创建文档 1 和字段------------------------>>>");

//创建第一个文档

Document doc1 = new Document();

Field bookdNo1 = new Field("booknumber", "BOOKNUM1", Field.Store.YES, Field.Index.UN_TOKENIZED);

doc1.add(bookdNo1);

System.out.println("创建文档 2 和字段----------------->>>");

//创建第二个文档

Document doc2 = new Document();

Field bookdNo2 = new Field("booknumber", "BOOKNUM2", Field.Store.YES, Field.Index.UN_TOKENIZED);

doc1.add(bookdNo2);

System.out.println("将第一个文档加入到ram索引的目录中 ----------------->>>");

//将第一个文档加入内存目录中

ramWriter.addDocument(doc1);

//关闭

ramWriter.close();

System.out.println("将第二个文档加入到fs索引的目录中 ----------------->>>");

//将第二个文档加入到系统磁盘目录中

fsWriter.addDocument(doc2);

fsWriter.addIndexes(new Directory[]{ramDir});

//关闭磁盘索引器

fsWriter.close();

System.out.println("关闭数据流,程序结束---------》》》》");

System.out.println("请到目录下查看生成的索引文件 ---"+ INDEX_PATH +"-------------->>>");

}catch(IOException e){

e.printStackTrace();

}

}

public static void main(String[] args) {

// TODO Auto-generated method stub

MergeIndex mi = new MergeIndex();

}

}

时间: 2024-10-06 18:05:43

使用RAMDirectory 和 FSDirectory对于索引创建的优化的相关文章

Lucene索引创建方法和步骤

在全文索引工具中,都是由这样的三部分组成 1.索引部分 2.分词部分 3.搜索部分 ---------------------------------- 索引创建域选项 ---------------------------------- Field.Store.YES或者NO(存储域选项) YES:表示会把这个域中的内容完全存储到文件中,方便进行还原[对于主键,标题可以是这种方式存储] NO:表示把这个域的内容不存储到文件中,但是可以被索引,此时内容无法完全还原(doc.get())[对于内容

MySQl索引创建

一.什么是索引? 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录.表里面的记录数量越多,这个操作的代价就越高.如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置.如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍. 假设我们创建了一个名为people的表: CREATE TABLE people ( p

MySQL 5.7新支持--------Json索引创建实战

1. 背景 * 在MySQL 5.7.8中,MySQL支持由RFC 7159定义的本地JSON数据类型,它支持对JSON(JavaScript对象标记)文档中的数据进行有效访问. * MySQL会对DML JSON数据自动验证.无效的DML JSON数据操作会产生错误. * 优化的存储格式.存储在JSON列中的JSON文档转换为一种内部格式,允许对Json元素进行快速读取访问. * MySQL Json类型支持通过虚拟列方式建立索引,从而增加查询性能提升. 2. Json 索引 * 创建Json

MongoDB索引创建(5)

索引创建 1:索引提高查询速度,降低写入速度,权衡常用的查询字段,不必在太多列上建索引 2. 在mongodb中,索引可以按字段升序/降序来创建,便于排序 3. 默认是用btree来组织索引文件,2.4版本以后,也允许建立hash索引. 查看查询计划 db.find(query).explain(); "cursor" : "BasicCursor", ----说明没有索引发挥作用 "nscannedObjects" : 1000 ---理论上要

sql索引创建

什么是索引 拿汉语字典的目录页(索引)打比方:正如汉语字典中的汉字按页存放一样,SQL Server中的数据记录也是按页存放的,每页容量一般为4K .为了加快查找的速度,汉语字(词)典一般都有按拼音.笔画.偏旁部首等排序的目录(索引),我们可以选择按拼音或笔画查找方式,快速查找到需要的字(词). 同理,SQL Server允许用户在表中创建索引,指定按某列预先排序,从而大大提高查询速度. •          SQL Server中的数据也是按页( 4KB )存放 •          索引:是

InnoDB 快速索引创建

5.0和更早版本的MySQL中,在一个已经有很多数据的表上添加或者删除一个索引将非常耗时.CREATE INDEX和DROP INDEX通过创建一个新的空的带有要创建索引的表,然后拷贝存在的行到新表中,同时更新索引,当此时key没有排序时插入条目极慢.在所有的行都被拷贝完成以后,旧表被删除,新表被改名. 从5.1开始,MySQL允许一个存储引擎在不拷贝表数据的情况下创建或者删除一个索引.MySQL 5.1中内建的InnoDB,并没有利用这个特点,新发布的插件带有这个功能. 在InnoDB中,表的

MySQL索引创建与删除,MySQL存储引擎的配置

MySQL索引创建与删除 1.1 问题 本案例要求熟悉MySQL索引的类型及操作方法,主要练习以下任务: 普通索引.唯一索引.主键索引的创建/删除 自增主键索引的创建/删除 建立员工表yg.工资表gz,数据内容如表-1.表-2所示,设置外键实现同步更新与同步删除 表-1 员工表yg的数据 表-2 工资表gz的数据 1.2 步骤 实现此案例需要按照如下步骤进行. 步骤一:索引的创建与删除 创建表的时候指定INDEX索引字段 创建库home: mysql> create database home;

ES(ElasticSearch) 索引创建

个人分类: ElasticSearchindex 环境:ES 6.2.2 os:Centos  7 kibana:6.2.2 1.创建新的索引(index) PUT indexTest001 结果: 2.索引设置 ES 默认提供了好多索引配置选项,参考https://www.elastic.co/guide/en/elasticsearch/reference/5.6/index-modules.html,这些配置选项都有经过优化的默认配置值,除非你非常清楚这些配置的作用以及知道为什么去修改它,

SQL Server获取索引创建时间&重建时间&重组时间

原文:SQL Server获取索引创建时间&重建时间&重组时间 之前写过一篇博客"SQL Server中是否可以准确获取最后一次索引重建的时间?",里面主要讲述了三个问题:我们能否找到索引的创建时间?最后一次索引重建(Index Rebuild)的时间? 最后一次索引重组(INDEX REORGANIZE)的时间呢?,当时得出的结论,答案是我们无法准确的找到索引的创建时间.最后一次索引重组时间,最后一次索引重建的时间.但是最近看到一篇博客"SQL Server