Lucene Field.Store.YES与Field.Store.NO

Lucene Field.Store.YES与Field.Store.NO,lucene,Lucene,请有人解释一下在什么情况下我可以使用Field.Store.NO而不是Field.Store.YES?我对Lucene非常陌生。我正在尝试创建一个文档。根据我的基本知识,我正在做 doc.add(new StringField(fieldNameA,fieldValueA,Field.Store.YES)); doc.add(new TextField(fieldNameB,fieldValueB,Field.Store.YES)); 有两种基本方法可以将文档写入Lucene 索引-对字段进

请有人解释一下在什么情况下我可以使用
Field.Store.NO
而不是
Field.Store.YES
?我对Lucene非常陌生。我正在尝试创建一个文档。根据我的基本知识,我正在做

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

有两种基本方法可以将文档写入Lucene

  • 索引-对字段进行分析和索引,并可以对其进行搜索
  • 存储-存储字段的全文,并将返回搜索结果
如果文档已编制索引但未存储,则可以搜索它,但不会返回搜索结果

一种相当常见的模式是使用lucene进行搜索,但只存储一个ID字段,该字段可用于从SQL数据库、文件系统或web资源检索文档/记录的完整内容


如果某个字段只是一个搜索工具,您也可以选择不存储该字段,但不会向用户显示该字段,例如soundex/metaphone或内容字段的替代分析。

当您需要从Lucene document返回文档时,请使用
field.store.YES
。当您只需要从文档进行搜索时,请使用“否”。下面是一个用场景解释的链接。

谢谢您的回复。为了精确性/完整性:如果我只想要回documentId,那么我应该使用
Field.Store.NO
:搜索将在没有明显差异的情况下进行,但只返回documentId?我还必须显式指定
fieldType.setIndexed(true)
?文档id只是
scoreDoc.doc
?对,使用该模式,您的文档id可能是唯一设置为
Store.YES
的字段。字段是否存储对搜索时匹配的文档没有影响,只影响检索文档时返回的内容(例如从)。关于标识符的用法,如果您试图从外部资源识别文档,我不会使用Lucene的内部DocID。使用数据库中的密钥、文件系统路径或任何适合情况的方法。通常不需要指定是否要为文档编制索引
TextField
StringField
等。每个人都有自己的隐式策略来分析文档(
TextField
被索引和分析,
StringField
被索引但未被分析,
StoredField
未被索引)。