一个lucene字段的store属性

Posted

技术标签:

【中文标题】一个lucene字段的store属性【英文标题】:the store attribute of a lucene field 【发布时间】:2011-05-10 00:46:05 【问题描述】:

有一个lucene Field的构造函数:

Field(String name, String value, Store store, Index index)

例如,我可以通过以下方式创建一个新字段:

Field f1 = new Field("text", "The text content", Field.Store.YES, Field.Index.ANALYZED);

我不太清楚第四个参数的含义:Index

如果我设置为Index.No,那么是否需要将此字段添加为“字段”?

既然在我看来,一旦一个属性被声明为一个字段,它就应该被索引,如果不是那么你为什么将它声明为一个字段?

查询和搜索有什么区别?

【问题讨论】:

【参考方案1】:

存储字段是您ask Lucene to give you back a document 时返回的内容。它们持有字段的原始值,无需分析。您可以使用它们向用户展示文档(不一定是所有字段)。

未编入索引的存储字段对于存储用户不会用于查询索引的文档的元数据很有用。一个示例可能是文档来自的数据库 ID。这个 id 永远不会被用户使用,因为他们不知道它,所以索引它通常是没有用的。但是如果你存储它,那么你可以使用它在运行时从你的数据库中收集额外的信息。

查询和搜索之间的区别是相当主观的。对我来说,搜索实际上是在索引中搜索的一般行为,而查询是实际的query string used to search the index。

【讨论】:

【参考方案2】:

如Lucene FAQ中所述:

Stored、Tokenized、Indexed 和 Vector 有什么区别?

Stored = 存储在 Lucene 索引中的原样值 标记化 = 使用指定的分析器分析字段 - 发出的标记已编入索引 索引 = 文本(无论是关键字字段的原样,还是来自标记化字段的标记)可搜索(也称为反转) Vectored = 每个文档的词频以易于检索的方式存储在索引中。

你可以只索引字段内容而不存储它,该字段也是可搜索的,只是不能突出显示结果,因为突出显示需要原始消息内容,应该存储。

【讨论】:

那么为什么要创建一个字段而不对其进行索引呢? 例如,存储postid,索引帖子内容,然后你可以在搜索lucene后通过postid加载这些帖子。

以上是关于一个lucene字段的store属性的主要内容,如果未能解决你的问题,请参考以下文章

lucene 查询部分字段总是返回 null

lucene Index Store TermVector 说明

lucene 6.0 经常使用类与方法

elasticsearch 特殊字段

Lucene(7.3.1)学习笔记-Document类源码解析

搜索系统19:lucene索引的五个关键知识点