Когда следует использовать Lucene RAMDirectory? Каковы его преимущества перед другими механизмами хранения? Наконец, где я могу найти простой пример кода?
Использование RAMDirectory
Ответ 1
Если вы не хотите постоянно хранить данные индекса. Я использую это для тестирования. Добавьте данные в свой RAMDirectory, выполняйте тесты вашего устройства в RAMDir.
например
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 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();
}
Обычно, если что-то работает с RAMDirectory, оно будет отлично работать с другими. т.е. постоянно хранить ваш индекс.
Альтернативой этому является FSDirectory. В этом случае вам придется позаботиться о разрешениях файловой системы (что недействительно с RAMDirectory)
Функционально, нет очевидного преимущества RAMDirectory над FSDirectory (кроме того, что RAMDirectory будет заметно быстрее, чем FSDirectory). Они оба обслуживают две разные потребности.
- RAMDirectory → Первичная память
- FSDirectory → Вторичная память
Довольно похоже на ОЗУ и жесткий диск.
Я не уверен, что произойдет с RAMDirectory, если он превысит лимит памяти. Идентификатор, кроме
OutOfMemoryException: System.SystemException
выброшен.