我最近使用自动脚本从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高一个数字(我可能错了)
所以我的问题是,如何解决这个问题,以便我可以执行reindex?
Liferay EE 6.2 Tomcat 7.0.33 SQL Server
答案 0 :(得分:5)
我发现手动删除的用户的 contactId 仍然在联系人_ 表中。我从表中删除了他,现在可以执行reindex。我现在可以看到所有用户和重建索引后的用户组。
来自LR:
使用Liferay的规则#1 - 数据库不是你的,你应该 从来没有在它,你永远不应该发出sql。
Liferay API是修改数据的唯一方法。周期。
Liferay API支持删除用户。如果你使用Liferay API, 用户将被删除,您的索引等将被删除 很好。
好的,我知道这会有点咄咄逼人 什么,但这很重要。整个Liferay系统依赖于 这是数据,所以任何时候你可能手动调整数据 打破了系统。如果你通过实际过程挖掘那个 Liferay API为用户删除,你会看到“从中删除 user_ where ......“只是一小部分。
我总是告诉Liferay的新人忘记数据库 存在。它绝对是他们的数据库,而不是你的数据库,它不是 搞砸了。