Lucene 使用RAMDirectory

Lucene 使用RAMDirectory,lucene,lucene.net,Lucene,Lucene.net,我应该什么时候使用Lucene的RAMDirectory?与其他存储机制相比,它有哪些优势?最后,在哪里可以找到一个简单的代码示例?当您不想永久存储索引数据时。我使用它进行测试。将数据添加到RAMDir目录,在RAMDir中进行单元测试。 e、 g 或 public void testRAMDirectory()引发IOException{ Directory dir=FSDirectory.getDirectory(indexDir); MockRAMDirectory ramDir=新的Mo

我应该什么时候使用Lucene的RAMDirectory?与其他存储机制相比,它有哪些优势?最后,在哪里可以找到一个简单的代码示例?

当您不想永久存储索引数据时。我使用它进行测试。将数据添加到RAMDir目录,在RAMDir中进行单元测试。
e、 g

public void testRAMDirectory()引发IOException{
Directory dir=FSDirectory.getDirectory(indexDir);
MockRAMDirectory ramDir=新的MockRAMDirectory(dir);
//关闭参考底图目录
dir.close();
//检查尺寸
assertEquals(ramDir.sizeInBytes(),ramDir.getRecomputedSizeInBytes());
//打开读卡器以测试文档计数
IndexReader=IndexReader.open(ramDir);
assertEquals(docsToAdd,reader.numDocs());
//打开搜索窗口,检查是否存在所有文档
IndexSearcher search=新的IndexSearcher(阅读器);
//搜索所有文档
对于(int i=0;i
通常情况下,如果使用RAMDirectory可以解决问题,那么其他人也可以很好地使用它。i、 e.永久存储索引。
另一个选择是。在这种情况下,您必须注意文件系统权限(对于RAMDirectory无效)

从功能上讲,RAMDirectory没有明显优于FSDirectory的优势(除了RAMDirectory明显快于FSDirectory这一事实)。它们都满足两种不同的需求

  • RAMDirectory->Primary memory
  • FSDirectory->Secondary memory
非常类似于RAM和硬盘

如果RAMDirectory超过内存限制,我不确定它会发生什么。我只想买一个

OutOfMemoryException: System.SystemException


抛出。

您好,感谢您的回复…使用RAMDirectory比使用FSDirectory有什么优势?此外,如果索引的大小超过RAM内存,该怎么办?对象的大小有2GM的限制。如果你的RAMDirecotry超过了这个值,即使你有足够的内存,你也会得到一个OutOfMemoryException。在内部,它使用concurrenthasmap来排列文件。
 public static void main(String[] args) {
    try {
      Directory directory = new RAMDirectory();  
      Analyzer analyzer = new SimpleAnalyzer();
      IndexWriter writer = new IndexWriter(directory, analyzer, true);
  public void testRAMDirectory () throws IOException {

    Directory dir = FSDirectory.getDirectory(indexDir);
    MockRAMDirectory ramDir = new MockRAMDirectory(dir);

    // close the underlaying directory
    dir.close();

    // Check size
    assertEquals(ramDir.sizeInBytes(), ramDir.getRecomputedSizeInBytes());

    // open reader to test document count
    IndexReader reader = IndexReader.open(ramDir);
    assertEquals(docsToAdd, reader.numDocs());

    // open search zo check if all doc's are there
    IndexSearcher searcher = new IndexSearcher(reader);

    // search for all documents
    for (int i = 0; i < docsToAdd; i++) {
      Document doc = searcher.doc(i);
      assertTrue(doc.getField("content") != null);
    }

    // cleanup
    reader.close();
    searcher.close();
  }