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

Kat*_*lon 12 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));
Run Code Online (Sandbox Code Playgroud)

fem*_*gon 23

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

  • 索引 - 对字段进行分析和索引,并可以进行搜索.
  • 存储 - 存储字段的全文,并随搜索结果一起返回.

如果文档已编制索引但未存储,则可以搜索该文档,但不会将其与搜索结果一起返回.

一种相当常见的模式是使用lucene进行搜索,但只存储一个ID字段,可用于从例如SQL数据库,文件系统或Web资源中检索文档/记录的全部内容. .

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

  • 是的,使用该模式,您的 documentId 可能是唯一设置为“Store.YES”的字段。是否存储字段对搜索时匹配哪些文档没有影响,只会影响检索文档时返回的内容(例如来自 [`IndexSearcher.doc`](https://lucene.apache.org/ core/5_3_0/core/index.html?org/apache/lucene/search/IndexSearcher.html))。关于使用什么标识符,如果您尝试从外部资源识别文档,我不会使用 Lucene 的内部 DocID。使用数据库中的密钥、文件系统路径或任何适合情况的内容。 (3认同)
  • 谢谢回复。为了准确/完整:如果我想要返回的只是 documentId,那么我应该使用 `Field.Store.NO`:搜索将在没有明显差异的情况下进行,但只返回 documentId?我还必须明确指定“fieldType.setIndexed(true)”吗?文档 ID 只是“scoreDoc.doc”? (2认同)

小智 5

使用Field.Store.YES时,你需要从Lucene的文档的文档回来。当您只需要从文档中进行搜索时,请使用 NO。这是一个用场景解释的链接。 https://handyopinion.com/java-lucene-saving-fields-or-not/