我有一個應用程序需要非常靈活的搜索功能。作爲其中的一部分,用戶需要能夠對多個文本字段進行全文搜索,但也需要通過多個數字字段進行過濾,這些數字字段會定期更新數據(有時會超過一次或兩次一分鐘)。這些數據存儲在NDB數據存儲區中。定期更新數據和搜索API
我目前使用搜索API來創建文檔對象和索引來搜索文本數據,我知道我也可以將數字值添加到這些文檔進行索引。但是,由於這些數字字段的動態特性,我會不斷更新(刪除並重新創建)搜索API索引的文檔。即使我允許搜索API在一段時間內使用較舊的數據,仍需要每天更新幾次。對我而言,這似乎不是一種有效的方式來存儲此數據進行搜索,特別是考慮到搜索查詢的數量將遠遠少於數據更新的數量。
有沒有一種有效的方式可以處理這種動態數據,比不斷修改搜索文檔更高效?
我對這個想法的唯一想法是實現一個兩步過程,在這個過程中,全文搜索的結果可以用在針對NDB數據存儲的查詢中,或者使用Python手動過濾。這兩個都不是理想的,但我沒有想法。預先感謝您的幫助。
我的主要困境是使用這些數值進一步過濾結果。因此,如果我需要根據數值進一步縮小結果範圍,那麼我應該只使用這個緩存數據,遍歷結果集中的每組值,並使用緩存中的相關數值數據,並使用標準Python邏輯比較以消除不符合crtieria的結果? – Twistieman 2012-08-17 00:19:05
對不起,我錯過了你想過濾數字字段。在這種情況下,它基本上歸結爲執行應用程序級連接。 (或者,保留搜索文檔中的所有信息)。但是,如果可能的話,您希望利用數據存儲的查詢引擎。 因此,一種方法是基於數字過濾器對實體進行僅鍵查詢,然後根據文本查詢返回的文檔檢查該鍵列表,拋出與實體不相交的任何文檔關鍵列表。然後,對於通過該過濾器的文檔,從緩存中獲取關聯的數字數據。 – 2012-08-17 01:31:40
我上面評論的附錄 - 如果你的實體查詢返回了一個可管理的小結果集,那麼這種方法將是可行的。如果不是,並且如果doc結果集比實體查詢結果小得多,則可能會更好(如您所建議的那樣)將doc id約束推送到數據存儲區查詢。 – 2012-08-17 02:44:29