Lucene索引

Lucene索引,lucene,Lucene,我想使用Lucene为现有数据库中的表编制索引。我一直认为这个过程是这样的: 为表中的每一列创建一个“字段” 存储所有字段 “分析”除主键字段外的所有字段 将表中的每一行存储为Lucene文档。 虽然此表中的大多数列都很小,但有一列很大。此列也是包含将对其执行搜索的大部分数据的列 我知道Lucene提供了一个不存储字段的选项。我在考虑两种解决方案: 不管大小,都要存储字段,如果在搜索中找到了匹配项,则从文档中获取适当的字段 不存储该字段,如果在搜索中找到了命中,则查询数据库以获取相关信息 我意识

我想使用Lucene为现有数据库中的表编制索引。我一直认为这个过程是这样的:

为表中的每一列创建一个“字段” 存储所有字段 “分析”除主键字段外的所有字段 将表中的每一行存储为Lucene文档。 虽然此表中的大多数列都很小,但有一列很大。此列也是包含将对其执行搜索的大部分数据的列

我知道Lucene提供了一个不存储字段的选项。我在考虑两种解决方案:

不管大小,都要存储字段,如果在搜索中找到了匹配项,则从文档中获取适当的字段 不存储该字段,如果在搜索中找到了命中,则查询数据库以获取相关信息
我意识到可能没有一个一刀切的答案…

当然,如果你把所有东西都存储在Lucene上,你的系统会反应更灵敏。存储字段不会影响查询时间,它只会使索引的大小变大。如果行中只有一小部分包含大量数据,则可能不会太大。因此,如果索引大小不是您系统的问题,我会同意。

我强烈不同意Pascal的答案。索引大小会对搜索性能产生重大影响。主要原因是:

存储字段会增加索引大小。相对较慢的I/O系统可能存在问题; 在内存中加载文档时,存储的字段都会加载。这对GC来说可能是一个很好的压力 存储的字段可能会影响读卡器的重新打开时间。
当然,最后的答案要视情况而定。如果原始数据已经存储在其他地方,最好从原始数据存储中检索它。

将数据库中的一行添加到Lucene时,可以判断它是否确实需要写入反向索引。如果没有,您可以使用Index.not来避免将太多数据写入反向索引。
同时,可以通过键值判断查询列的位置。如果不是,则不需要使用Store.YES来存储数据。

+1表示Pascal的响应。您还可以标记大字段,而不存储它。通过这种方式,您可以在字段上查询搜索,获取相关文档/记录标识符,并从数据库中检索记录。感谢您的回复。如果我选择不存储任何字段,我也将无法使用突出显示Lucene contrib模块来突出显示搜索结果?这可以在不存储文本的情况下完成,但这不是简单的方法。在我之前的评论中,我指的是Solr。对于普通的Lucene,是的,我认为你需要存储字段。以及如何获得特定的行详细信息以将该信息存储为字段信息!Lucene不应被视为权威数据源。无论如何,数据都应该存储在其他地方,因此在未存储的文本字段上执行基于关键字的查询,然后执行查找,以从单一真相来源获取实际数据。确定。那么,如何做到这一点呢?如果有任何参考链接可用,那么它将非常有用。