lucene中生成倒排索引是否需要自己保存字段

Is it necessary to save the field itself to generate inverted index in lucene

我正在 lucene 中保存字段 id 和 msg 以支持全文搜索。当用户输入关键字时,lucene 执行搜索并显示结果,当用户使用保存的 ID 单击该关键字时,我打开从数据库中获取结果并显示更多详细信息。

lucene 是否可以只保存 msg 字段的倒排索引而不是整个 msg 字段,然后只将 ID 交给我,以便我可以从数据库中获取结果以显示结果?

这样我的数据就不会多余了。

在 Lucene 中,您为文档 creation/fetch 目的而存储的内容(您通过 DB 描述的目的)和为搜索目的而索引为倒排索引的内容是两个截然不同的事情。

您没有显示任何代码作为索引方式。

在 Lucene 中存储数据是可选的,人们也选择存储数据以避免以存储成本为代价的额外数据库调用等 space 但是将数据保存在主源中也会减少同步要求。所以需要权衡取舍。

在下面的代码片段中,DOC_ID 也被索引和存储,而 TEXT_FIELD 只是被索引而不存储。

Document doc = new Document();
doc.add(new Field("DOC_ID", "DOCONE", new FieldType(
            TextField.TYPE_STORED)));
doc.add(new Field("TEXT_FIELD", "This", new FieldType(
            TextField.TYPE_NOT_STORED)));
writer.addDocument(doc);

所以在搜索之后,假设你的命中文档是 - hitDoc 所以你会得到下面, hitDoc.getField("DOC_ID")="DOCONE"hitDoc.getField("TEXT_FIELD")=NULL

两个字段都已编入索引,但只存储了一个。索引意味着它可以被搜索到。