2014-04-28 86 views
0

我最近使用自動腳本從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服務器

回答

5

我發現了的ContactID我手動刪除用戶仍然在Contact_表。我從表中刪除了他,現在可以執行reindex。我現在可以在重新索引後看到所有用戶組。

從LR:

規則#1使用的Liferay - 數據庫是不是你的,你應該 永遠不會在它,你不應該發出SQL反對。

Liferay API是修改數據的唯一方法。期。

Liferay API支持用戶刪除。如果您使用Liferay API, 用戶將被刪除,您的索引等,將有 罰款。

好吧,我知道這會發生一些有點侵略性的事情,但這很重要。整個Liferay系統取決於它的數據,所以無論何時你手動調整數據,它都可能破壞系統。如果您深入瞭解Liferay API爲刪除用戶所做的實際過程,您會發現「從 user_ where ...中刪除」只是一小部分。

我總是告訴新來Liferay的人忘記數據庫 存在。這絕對是他們的數據庫,不是你的,也不是 搞亂了。

+1

這與我可能寫的答案非常接近 - 實際上,引用的內容甚至可能是我在不同位置找到的單詞:) –

+1

此引用來自David H Nebinger,他很快回復了我在Liferay論壇發佈的帖子:https://www.liferay.com/community/forums//message_boards/message/37253618。雖然先生,我感謝您的意見。 –

+1

如果Liferay有外鍵約束,這個「規則」就會過時。只是說... –