簡體   English   中英

通過重用文檔和字段實例提高Lucene索引性能時的問題

[英]problems when Improve Lucene Index Performance by reuse Document and Field Instance

有許多改進Lucene Indexing性能的方法,我已經遵循了該網站的許多技巧ModifyIndexingSpeed Tips ,包括:

  1. 通過重寫IndexWriter的幾種方法(即addDocument updateDocument在索引中應用多addDocument updateDocument ,這為我帶來了很多性能改進(快約addDocument updateDocument倍)。
  2. 重用Document和Field實例。 根據提示,它說:“最好創建一個Document實例,然后向其中添加多個Field實例,但是要保留這些Field實例,並通過更改每個添加的文檔的值來重新使用它們”。

第一個技巧帶來了良好的性能改進,而第二個技巧則沒有。

我將Document ,Field設為Document ,Field靜態實例,因此不會每次都實例化它(節省了創建開銷和資源)。

private static Document doc = new Document();
private static Field uinField = new StringField("uin", "", Store.YES);
private static Field nameField = new StringField("name", "", Store.YES);
private static Field urlField = new StringField("url", "", Store.YES);
private static Field servField = new TextField("services", "", Store.YES);

使用Field setValue方法更改其中的值,然后將其添加到doc實例中。

uinField.setStringValue(String.valueOf(p.getUin()));
nameField.setStringValue(p.getName());
urlField.setStringValue(p.getUrl());
servField.setStringValue(p.getService());    
doc.add(uinField);
doc.add(nameField);
doc.add(urlField);
doc.add(servField);

在運行索引之后,該過程陷入了無限循環。 我猜這是由於MultiThread的副作用,它鎖定了Document and Field實例,並阻止了其他線程添加addDcoument。


我的問題是:

“重用”部分有什么問題? (我認為我的實現一定有問題,因為文檔沒有提到“重用文檔和字段”將與MultiThreads設計不兼容。

任何有關“如何實現重用文檔和字段”的建議將不勝感激

您不需要每次迭代都將字段添加到文檔中。 您只需在循環外添加一次,然后在循環中使用“ field.setValue writer.addDocument”即可。 就像這樣一個:

Document doc = new Document();
Field field1 = new TextField("field1", field1Value, Field.Store.YES);
doc.add(field1);
Field field2 = new StringField("field2", field2Value,Field.Store.YES);
doc.add(field2);
while ((line = br.readLine()) != null) {
    field1.setStringValue("field1Value");
    field2.setStringValue("field2Value");

    writer.addDocument(doc);
}

ZH ,我已經看到了ModifyIndexingSpeed技巧 ,技巧“重用文檔和字段實例”中有一個注釋:
“請注意,您不能在文檔中重復使用單個Field實例,並且,除非包含該字段的Document被添加到索引中,否則您不應該更改Field的值。有關詳細信息,請參見Field。”

因此,我認為您應該確保字段已寫入索引中。 之后,我們可以重用該字段實例。 但是,我沒有辦法知道何時確保該字段已寫入索引中。 如果您有辦法,請告訴我,謝謝。

抱歉我的英語不好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM