在Lucene中,有几种索引存放模式呢?用过的人可能记得SimpleFSDirectory、MMapDirectory、NIOFSDirectory、RAMDirectory这四种。新版本的通过FSDirectory.open可以自动获得最优的一种:

 public static FSDirectory open(File path, LockFactory lockFactory) throws IOException {
if ((Constants.WINDOWS || Constants.SUN_OS)
&& Constants.JRE_IS_64BIT && MMapDirectory.UNMAP_SUPPORTED) {
return new MMapDirectory(path, lockFactory);
} else if (Constants.WINDOWS) {
return new SimpleFSDirectory(path, lockFactory);
} else {
return new NIOFSDirectory(path, lockFactory);
}
}

  通过这段代码,我们级别可以了解各种Directory在哪种条件下是最优的。

MMapDirectory  内存映射索引模式,一部分放在内存,一部分放在磁盘,但是需要操作系统支持,最好是64位系统和64位JVM,这样内存才能达到最大的应用。linux 和 windows基本都能用。

SimpleFSDirectory 简单的磁盘存放,根据上面方法条件判断,在当MMapDirectory无法使用的时候,如果是Windows操作系统,推荐磁盘存储的模式。此种模式,会有大量的磁盘IO,因此索引的创建和检索严重依赖磁盘性能。

NIOFSDirectory  使用NIO方式读写索引。这个条件更恶搞了,在它之前首先判断windows。意味,在windows下它认为这个不是最优。主要原因:在windows下java nio存在bug。

RAMDirectory 这种内存存储方式,在这个方法里没有体现。它主要用来存放非持久化索引的,也就意味程序关闭,索引就丢失了。

NRTCachingDirectory 这是一种内存加磁盘存储的模式,主要用在实时搜索的场景,这在高版本的lucene才有。在solr默认的索引存储目录就是它。
上面大致介绍了一下各种索引存放方式,再补充一句:上面各种在现有操作系统下都可以用,但是各种有自己的使用场景或者有自己缺点。

介绍完了lucene的索引目录,那么再说说solr的索引存放目录。solr是基于lucene封装的,也就是lucene有的,solr也有,但是solr还有自己封装的,我主要介绍下面HdfsDirectory 和BlockDirectory :
HdfsDirectory 把索引存放到hdfs上的,它的使用场景就是索引是海量的。一般不是大数据,不会把数据放到hdfs上。
BlockDirectory 根据名字我们可以知道,它把索引分成块,在分布式存储的一种概念,一切数据的存储都是block。它是solr 4.x的产物,在后续版本中可能被替换。平常使用的不多。

谈谈Lucene和Solr索引存目录的更多相关文章

  1. 使用solrj操作solr索引库,solr是lucene服务器

    客户端开发 Solrj 客户端开发 Solrj Solr是搭建好的lucene服务器 当然不可能完全满足一般的业务需求 可能 要针对各种的架构和业务调整 这里就需要用到Solrj了 Solrj是Sol ...

  2. Solr(六)Solr索引数据存放到HDFS下

    Solr索引数据存放到HDFS下 一 新建solr core hdfs 方法:http://www.cnblogs.com/Matchman/p/7287385.html 二 修改solrconfig ...

  3. 商城06——solr索引库搭建&solr搜索功能实现&图片显示问题解决

    1.   课程计划 1.搜索工程的搭建 2.linux下solr服务的搭建 3.Solrj使用测试 4.把数据库中的数据导入索引库 5.搜索功能的实现 2.   搜索工程搭建 要实现搜索功能,需要搭建 ...

  4. 使用Solr索引MySQL数据

    环境搭建 1.到apache下载solr,地址:http://mirrors.hust.edu.cn/apache/lucene/solr/ 2.解压到某个目录 3.cd into D:\Solr\s ...

  5. solr索引

    solr索引 当我们真正进入到Lucene源代码之中的时候,我们会发现: • Lucene的索引过程,就是按照全文检索的基本过程,将倒排表写成此文件格式的过程. • Lucene的搜索过程,就是按照此 ...

  6. lucene简介 创建索引和搜索初步

    lucene简介 创建索引和搜索初步 一.什么是Lucene? Lucene最初是由Doug Cutting开发的,2000年3月,发布第一个版本,是一个全文检索引擎的架构,提供了完整的查询引擎和索引 ...

  7. 3.Lucene3.x API分析,Director 索引操作目录,Document,分词器

     1  Lucene卡发包结构分析 包名 功能 org.apache.lucene.analysis Analysis提供自带的各种Analyzer org.apache.lucene.colla ...

  8. Solr 01 - 什么是Solr + Solr安装包目录结构说明

    目录 1 Solr概述 1.1 Solr是什么 1.2 Solr与Lucene的区别 2 Solr文件说明 2.1 Solr的目录结构 2.2 其他常用概念说明 2.3 创建基础文件目录 2.4 so ...

  9. Lucene底层原理和优化经验分享(1)-Lucene简介和索引原理

    Lucene底层原理和优化经验分享(1)-Lucene简介和索引原理 2017年01月04日 08:52:12 阅读数:18366 基于Lucene检索引擎我们开发了自己的全文检索系统,承担起后台PB ...

随机推荐

  1. 12款响应式的 jQuery 旋转木马(传送带)插件

    在企业网站,作品集网站,电子商务网站或任何其他类型的网站内容显示图片可以使用 jQuery 旋转木马(传送带)插件来实现. jQuery 旋转木马插件允许开发人员以水平或垂直的方式显示内容,视频和图像 ...

  2. Voix.js – 使用声音来控制和操纵你的网站

    我们通常使用鼠标和键盘(在移动端使用触摸)来操作网站,如今 Voix.js 能够让我们使用声音控制网站,很酷吧?它可以启动和停止侦听麦克风,在检测到一个给定的关键字时触发绑定的特定事件.Voix.js ...

  3. 给SHP文件定义投影

    #!/usr/bin/env python # -*- coding: utf-8 -*- import urllib.request import os def get_epsg_code(epsg ...

  4. SharePoint 2013 Error - File names can't contain the following characters: & " ? < > # {} % ~ / \.

    错误截图: 错误信息: --------------------------- Message from webpage --------------------------- File names ...

  5. [GitHub] GitHub使用教程for Eclipse

    1.下载egit插件 打开Eclipse,git需要eclipse授权,通过网页是无法下载egit的安装包的.在菜单栏依次打开eclipse→help→install new software→add ...

  6. linker command failed with exit code 1 (use -v to see invocation)解决办法

    [cpp] view plaincopy Undefined symbols for architecture i386:     "_OBJC_CLASS_$_FMDatabase&quo ...

  7. iOS远程推送原理及实现过程

    ➠更多技术干货请戳:听云博客 推送通知,是现在的应用必不可少的功能.那么在 iOS 中,我们是如何实现远程推送的呢?iOS 的远程推送原理又是什么呢?在做 iOS 远程推送时,我们会遇到各种各样的问题 ...

  8. Windows操作系统优化(Windows优化大师版) - 进阶者系列 - 学习者系列文章

    Windows优化大师是一款不错的优化软件.笔者以前在使用XP的时候就使用该软件进行优化.下面就简要的介绍该软件优化的过程. 1.  下载该软件. http://dl.youhua.com/youhu ...

  9. ajax异步上传到又拍云的实例教程

    作者:白狼 出处:www.manks.top/article/async_upload_to_upyun 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否 ...

  10. C#语句1:选择语句一(if else )

    语句是指程序命令,都是按照顺序执行的.语句在程序中的执行顺序称为“控制流”或“执行流”. 根据程序对运行时所收到的输入的响应,在程序每次运行时控制流可能有所不同. 注意,语句间的标点符号必须是英文标点 ...