在Lucene索引中添加文档时如何获取DocId?

时间:2010-03-11 14:16:48

标签: lucene lucene.net

我正在为Lucene.Net中的数据库索引一行数据。一行等同于Document。

我想用DocId更新我的数据库,这样我就可以在结果中使用DocId来快速检索行。

我目前首先从结果文档中检索PK,我认为这应该比使用DocId从数据库直接重新检索要慢。

在向Lucene添加文档时如何找到DocId?

2 个答案:

答案 0 :(得分:3)

依靠Lucene的DocId是一个糟糕的政策,因为即使Lucene试图避免这种情况。我建议你创建自己的DocId。在数据库中,我将使用auto-increment field。如果您的应用程序不使用关系数据库,则可以以编程方式创建此类型的字段。除此之外,我建议你阅读Search Engine versus DBMS - 我相信只有可以搜索的字段才能存储在Lucene中;该行的其余部分属于数据库,因此事件序列为:

  1. 使用Lucene,搜索一些文本并获取DocId。
  2. 使用DocId从数据库中检索完整行。

答案 1 :(得分:2)

正如Yuval所说,泄漏内部Lucene实现细节是不好的,特别是因为当索引发生变异时Lucene doc id的变化。

如果使用doc.get(“pk”)查找主键对你来说太慢了,请使用FieldCache缓存内存中的所有pk。然后查找将非常快。