Lucene 使用RAMDirectory
我应该什么时候使用Lucene的RAMDirectory?与其他存储机制相比,它有哪些优势?最后,在哪里可以找到一个简单的代码示例?当您不想永久存储索引数据时。我使用它进行测试。将数据添加到RAMDir目录,在RAMDir中进行单元测试。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
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
抛出。您好,感谢您的回复…使用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();
}