java - lucene中生成倒排索引是否需要保存字段本身

标签 java indexing lucene full-text-search inverted-index

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

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

通过这样做,我的数据将不再是多余的。

最佳答案

在 Lucene 中,出于文档创建/获取目的而存储的内容(通过 DB 描述的目的)和出于搜索目的而索引为倒排索引的内容是两个截然不同的事物。

您没有显示任何索引代码。

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

在下面的代码片段中,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

两个字段都已建立索引,但仅存储一个字段。索引意味着可以搜索。

关于java - lucene中生成倒排索引是否需要保存字段本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44062922/

相关文章:

java - 如果存在用户输入错误,如何阻止我的 Java 代码被处理?

mysql - 有没有办法直接访问 MariaDB 或 MySQL 表索引?

indexing - CubeJs 预聚合索引无法编译

java - ElasticSearch JAVA API 查找给定索引的别名

tomcat - 在 Lucene 中索引 500,000 个用户时频繁的 GC (ParNew)

java - Spring bean创建错误

java - 为什么 Jersey 1.x 会与 Jersey 2.x 冲突?

java - 根据bean属性值获取最早时间

iOS 部分索引滚动到错误的位置