【问题标题】:Can't Reindex All Search Indexes无法重新索引所有搜索索引
【发布时间】:2014-04-28 13:22:36
【问题描述】:

我最近使用自动化脚本从我的 Liferay 数据库中删除了 120,000 个用户。然而,在此之前,我使用 DELETE FROM User_ WHERE userId=1234567 从数据库中手动删除了 2 个用户 - 只是为了看看用户可能拥有的任何关联会发生什么。

用户已被删除,但包含该 userId (1234567) 的所有其他表行仍然存在。很好。

所以现在我想重新索引所有搜索索引以获取当前用户列表,但 LR 抛出异常:

08:07:41,922 ERROR [http-bio-20110-exec-290][LuceneIndexer:136] Error encountere
d while reindexing
com.liferay.portal.kernel.search.SearchException: com.liferay.portal.NoSuchUserE
xception: No User exists with the key {contactId=1234568}
       at com.liferay.portal.kernel.search.BaseIndexer.getDocument(BaseIndexer.j
ava:179)
       at com.liferay.portlet.usersadmin.util.ContactIndexer$1.performAction(Con
tactIndexer.java:203)
  at com.liferay.portal.kernel.dao.orm.BaseActionableDynamicQuery.performActions
InSingleInterval(BaseActionableDynamicQuery.java:309)
     at com.liferay.portal.kernel.dao.orm.BaseActionableDynamicQuery.performActi

这个contactId 似乎对于任何创建的用户来说都比userId高一个数字(我可能错了)

所以我的问题是,我该如何解决这个问题,以便我可以执行重新索引?

Liferay EE 6.2 雄猫 7.0.33 SQL 服务器

【问题讨论】:

    标签: liferay


    【解决方案1】:

    我发现手动删除的用户的 contactId 仍在 Contact_ 表中。我从表中删除了他,现在可以执行重新索引。我现在可以在重新索引后查看所有用户和用户组。

    来自 LR:

    使用 Liferay 的规则 #1 - 数据库不是你的,你应该 永远不要在里面,你也不应该针对它发出 sql。

    Liferay API 是修改数据的唯一方法。期间。

    Liferay API 支持用户删除。如果你使用过 Liferay API, 用户将被删除,您的索引等将 很好。

    好的,我知道这会让人觉得有点咄咄逼人,或者 东西,但它很重要。整个 Liferay 系统依赖于 它是数据,所以任何时候你手动调整数据都有可能 破坏系统。如果您深入了解实际过程 Liferay API 用于用户删除,你会看到“delete from user_ where ..." 只是一小部分。

    我总是告诉刚接触 Liferay 的人忘记数据库 存在。这绝对是他们的数据库,不是你的,也不是 搞砸了。

    【讨论】:

    • 这与我可能写的答案非常接近 - 事实上,引用的内容甚至可能是您在不同位置找到的我的话 :)
    • 这句话来自 David H Nebinger,他很快回复了我在 Liferay 论坛上的帖子:liferay.com/community/forums/-/message_boards/message/37253618。先生,我感谢您的意见。
    • 如果 Liferay 有外键约束,这个“规则”就已经过时了。只是说...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多