2009-12-17 91 views
1

我有這個問題很長一段時間,並且找不到解決方案。 我想這可能是每個人都面臨使用獅身人面像,但我cnanot得到任何 有用的信息。獅身人面像刪除文件

我有一個索引和一個增量。 我在php模塊中查詢兩個索引,然後顯示結果。 對於結果中的每個ID,我爲模型創建一個對象,併爲該模型創建dsiplay主數據 。

我以物理方式從數據庫中刪除一個文檔。

當我查詢索引,對於該刪除的文檔ID是仍然存在(在斯芬克斯 結果集)。 也許我可以通過代碼檢測到這一點,並避免顯示它,但結果集獅身人面像給我 結果是錯誤的。 xxx total_found,當時真的是xxx-1。 例如,獅身人面像給了我前20個結果,但這20個結果中有一個不存在 ,所以我只能顯示19個結果。

我每天爲主索引重新索引一次,索引索引每5分鐘一次。

有沒有解決方案?

在此先感謝!

回答

1

我已經在我的紅寶石獅身人面像適配器做什麼,思考獅身人面像,是跟蹤時記錄被刪除,並更新主索引(我稱之爲sphinx_deleted)用於記錄的布爾屬性。然後,每當我搜索,我就值進行過濾,其中sphinx_deleted是0。sql_query配置,我有明確的屬性如下:

SELECT fields, more_fields, 0 as sphinx_deleted FROM table 

當然還有的屬性定義爲好。

sql_attr_bool = sphinx_deleted 

請記住,這些更新屬性(使用獅身人面像API)僅存儲在內存中 - 標的指數的文件都沒有改變,因此,如果您重新啓動獅身人面像,你就會失去這方面的知識,除非你也做一個完整的索引。

這是一些工作,但它會保證你的結果數和分頁將整齊地工作。

+0

權,你在調用數據庫中刪除一個記錄後,獅身人面像API函數UpdateAttirbutes並設置sphinx_deleted 1此記錄。另外,在火搜索查詢之前,爲sphinx_deleted添加過濾器。 – 2011-11-29 12:15:43

0

我想你可能會要求從獅身人面像可能25個結果,然後當你從你的數據庫的全部數據只有一個limit 20查詢。