无法重新索引所有搜索索引

Kur*_*usu 0 liferay

我最近使用自动脚本从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
Run Code Online (Sandbox Code Playgroud)

对于任何创建的用户,此contactId 似乎比userId高一位数(我可能错了)

所以我的问题是,如何解决这个问题,以便我可以执行reindex?

Liferay EE 6.2 Tomcat 7.0.33 SQL Server

Kur*_*usu 5

我发现了的ContactID我手动删除用户仍然在Contact_表.我从表中删除了他,现在可以执行reindex.我现在可以在重建索引后看到所有用户和用户组.

来自LR:

使用Liferay的规则#1 - 数据库不是你的,你永远不应该在它中,你永远不应该对它发出sql.

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

Liferay API支持用户删除.如果你使用Liferay API,用户就会被删除,你的索引等也没问题.

好吧,我知道这会有点像攻击性的东西,但这很重要.整个Liferay系统依赖于它的数据,因此每当您手动调整数据时,它可能会破坏系统.如果您仔细研究Liferay API为用户删除所做的实际过程,您会发现"从user_ where ...中删除"只是一小部分.

我总是告诉Liferay的新人忘记数据库存在.它绝对是他们的数据库,而不是你的数据库,它不会被搞砸.