0

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

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

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

在执行搜索时,假设我们可以按问题标题和问题作者进行搜索,这只是一个用户。

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

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

  1. 我是否应该为用户和问题提供单独的文档,并让 lucene 根据需要获取所需的问题/用户详细信息?
  2. 或者,采用数据传输对象方式?当有更改时,只需删除这些文档并重新索引?
4

2 回答 2

2

我会减少两个索引——一个是针对用户的问题,一个是针对用户的问题。根据您需要进行的搜索,两者都可以派上用场。

重新阅读您的问题,当用户更新其姓名时您需要做的是执行 lucene 查询以获取用户拥有的文档并更新它们。根据您进行索引的方式,这种变化可能会很快反映出来。

于 2012-05-11T03:13:04.240 回答
0

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

采用第一种方法,您将保留系统中的所有用户。如果此人输入他们的名字为 Bob,然后将其更改为 William,那么您最终会在索引中始终有两个名字悬而未决问题,因为索引器将始终将它们视为不同的记录。

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

于 2012-05-10T12:44:21.767 回答