>source

강제 병합을 사용하지 않고 세그먼트가 하나만있는 Lucene 색인을 작성하는 방법 충분한 RAM이 있으므로 최대 64-128MB의 작은 인덱스에 대해 1.5GB 버퍼 크기를 사용하려고 시도했지만 인덱싱 끝에서 여전히 5-10 세그먼트가 있습니다. 어떻게해야합니까?

public static final double DEFAULT_RAM_BUFFER_SIZE_MB_STORE = 1536.;
...
final File file = new File(pathIndex);
final Path path = file.toPath();
final Directory index = ControlObjectsLuceneIndex.createDirectory(path, file);
final IndexWriterConfig indexWriterConfig = new IndexWriterConfig(analyzer);
indexWriterConfig.setRAMBufferSizeMB(defaultRamBufferSizeMb);
indexWriterConfig.setSimilarity(_ekspertSimilarity);
indexWriterConfig.setUseCompoundFile(false);
return new IndexWriter(index, indexWriterConfig);

  • 답변 # 1

    와이즈 비즈 와이즈 비즈 ) 또는   추가 된 문서 (

    A flush is triggered when there are enough added documents since the last flush. Flushing is triggered either by RAM usage of the documents (see 참조) ).

    즉, 플러시를 방지하려면 추가 된 문서 수와 RAM 사용량이 모두 한도 미만이되도록 두 값 모두에 상한을 설정해야합니다.

    또 다른 접근법은 IndexWriterConfig.setRAMBufferSizeMB(double) 를 통과하는 것입니다  와이즈 비즈  또는 IndexWriterConfig.setMaxBufferedDocs(int) 에서  버퍼링 된 문서 수 또는 RAM 사용으로 인한 플러시 트리거를 방지합니다. 그러나 두 값을 모두 IndexWriterConfig.DISABLE_AUTO_FLUSH 로 설정할 수는 없습니다.  RAM보다 많은 수의 문서를 쉽게 파악할 수 있어야합니다.

    또한 IndexWriter 사용이 단일 스레드에서만 사용되는지 (또는 올바르게 동기화되어 있는지)

    출처 : https://lucene.apache.org/core/7_6_0/core/org/apache/lucene/index/IndexWriter.html

    setMaxBufferedDocs

  • 이전 c - K&R 42 atof 기능
  • 다음 테스트를위한 Amazon SNS 인라인 Java 구독