Lucene指数更新

时间:2012-05-10 12:30:57

标签: lucene.net lucene

考虑到我有两组对象“问题”和“用户”,它们共享一种关系。

在构建lucene索引时,我可以单独索引这两个对象,即每个问题的文档和每个用户的文档。

或者我可以拥有一个数据传输对象,它将来自问题的属性和用户在单个对象中展平并索引此数据传输对象。

执行搜索时,我们可以按问题标题和只是用户的问题作者进行搜索。

出于某种原因,假设我的系统允许用户更改其显示名称。

索引我的对象以允许最新更改反映在lucene idex中的最佳方法是什么?

  1. 我是否应该为用户和问题提供单独的文件,并根据需要获得所需的问题/用户详细信息?
  2. 或者,转到数据传输对象的方式?有变化时只需删除这些文件并重新索引吗?

2 个答案:

答案 0 :(得分:2)

我会使用两个索引 - 一个用于按用户提问,另一个用于用户提问。根据您需要进行的搜索,两者都可以派上用场。

重新阅读您的问题,当用户更新其名称时您需要执行的操作是执行lucene查询以获取用户拥有的文档并更新它们。根据您进行索引的方式,可以快速反映变化。

答案 1 :(得分:0)

主要对象ID将在最初导入/索引时与项目相关联。如果用户在下次将该记录导入lucene时更改其名称或其他字段值,如果没有逻辑来管理/检查索引记录的更新,则将创建新记录。你的名字例子是一个完美的场景。

采用第一种方法,您将保留系统中的所有用户。如果这个人输入他们的名字作为Bob,然后将其改为William,你最终会在索引中留下两个悬挂问题的名字,因为索引器总是将这些名称视为不同的记录。

如果您想最小化重复,我建议删除索引并重新索引数据,这将确保数据完整性。否则,您可能会看到具有不同对象ID的重复记录(即新的索引记录)