lucene(二)索引的建立 Directory,lockFactory

生成索引的过程:

Analyzer analyzer = new StandardAnalyzer();//分词器,决定内容的分词方式
Directory directory = FSDirectory.open(Paths.get("D:\\index"));//创建存储目录Directory
IndexWriterConfig config = new IndexWriterConfig(analyzer);//写索引的配置
IndexWriter iwriter = new IndexWriter(directory, config);//写索引类
Document doc = new Document();//类似于数据库一条数据,一个Document对象
String text = "This is the text to be indexed.";
doc.add(new Field("fieldname", text, TextField.TYPE_STORED));
//Field类似于数据库一个字段,往Document上添加
iwriter.addDocument(doc);//添加索引(其实是update)
iwriter.close();//释放资源

Directory directory = FSDirectory . open ( Paths . get ( "D:\\index" ))  

Directory是 org.apache.lucene.store包下的类

  public static FSDirectory open(Path path) throws IOException {
    //第二个参数使用了默认文件锁工厂 NativeFSLockFactory,是一个单例工厂
有一个方法makeFSLock根据文件目录,文件名获得文件的唯一锁NatvieFSLock
     return  open ( path ,   FSLockFactory . getDefault ());
  }
 
  public static FSDirectory open(Path path, LockFactory lockFactory) throws IOException {
    if (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);
    }
  } 

NativeFSLock ( NativeFSLockFactory的内部类 )
     持有一个 线程安全的Set保存所有锁的集合   private static final Set LOCK_HELD 
                                                  Collections.synchronizedSet(new HashSet());  
          有一个线程安全的obtain方法获取锁,close方法释放锁.

BaseDirectory的种类   MMapDirectory, SimpleFSDirectory, NIOFSDirectory,RAMDirectory
MMapDirectory
把Lucence的索引当作了swap file来处理,用到了虚拟内存的映射关系读取 64位且支持虚 拟内存的系统, 默认用的这个 详细介绍 http://www.cnblogs.com/huangfox/p/3616298.html(推荐使用)  

SimpleFSDirectory
BaseDirectory的简单实现 poor concurrent performance (不支持MMapDirectory的Windows系统使用)

NIOFSDirector
用FileChannel进行读写操作,支持多线程,不适用Windows(Sun的FileChannel.read有bug),IO线程阻塞时,
从一个线程直接或间接的 访问这个类被中断时,会立刻关闭底层文件描述符,
继续访问会抛出ClosedChaanelException

RAMDirectory 内存存储
    











你可能感兴趣的:(lucene5.1)