Подтвердить что ты не робот

Использование RAMDirectory

Когда следует использовать Lucene RAMDirectory? Каковы его преимущества перед другими механизмами хранения? Наконец, где я могу найти простой пример кода?

4b9b3361

Ответ 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

выброшен.