2015-10-05 45 views
5

會有人請解釋在什麼情況下我可以使用Field.Store.NO代替Field.Store.YES?我對Lucene非常陌生。我正在嘗試創建一個文檔。根據我的基本知識,我正在做Lucene的Field.Store.YES與Field.Store.NO

doc.add(new StringField(fieldNameA,fieldValueA,Field.Store.YES)); 
doc.add(new TextField(fieldNameB,fieldValueB,Field.Store.YES)); 

回答

9

有一種文檔可以寫入Lucene的兩種基本方法。

  • 索引 - 該字段進行分析和索引,並可以搜索。
  • 存儲 - 本場的全部文本存儲,將與搜索結果中。

如果文檔被編入索引但沒有存儲,您可以搜索它,但它不會與搜索結果一起返回。

一個合理的常見模式是使用lucene進行搜索,但只有一個ID字段被存儲,可用於從例如SQL數據庫,文件系統等檢索文檔/記錄的完整內容。或網絡資源。

如果該字段只是一個搜索工具,但您不會將其顯示給用戶,例如soundex/metaphone或內容字段的替代分析,您可能也會選擇不存儲該字段。

+0

感謝您的答覆。對於準確性/完整性的考慮:如果我要的背面是documentId,那麼我應該使用'Field.Store.NO':搜索將是一個沒有感受差異進行的,但只有documentId會回來嗎?我也必須顯式指定'fieldType.setIndexed(true)'?文檔ID只是'scoreDoc.doc'? –

+0

對,使用該模式,您的documentId可能是唯一設置爲「Store.YES」的字段。無論字段存儲與否*哪個文件是不匹配的影響*搜索時,從['IndexSearcher.doc']只有在獲取文檔(例如什麼獲取返回。(https://lucene.apache.org/核心/ 5_3_0 /核心/ index.html的?組織/阿帕奇/ Lucene的/搜索/ IndexSearcher.html))。關於如何使用標識符,如果您試圖從外部資源中識別文檔,我不會使用Lucene的內部DocID。使用數據庫中的密鑰或文件系統路徑或任何適合情況的密鑰。 – femtoRgon

+0

您通常不需要指定是否要索引文檔。 'TextField','StringField'等每個對文檔應如何分析自己的隱式戰略('TextField'被索引和分析,'StringField'被索引,但沒有分析,'StoredField'沒有索引)。 – femtoRgon