2013-07-12 111 views
0

短版方法設置

我想的對象在我的數據庫任意一組內有效地進行全文搜索。所有對象都將在搜索引擎中編入索引。

我的想法

我打算使之成爲一條部分操作。首先,搜索引擎將被查詢與全文搜索相匹配的加權/排序的一組ID。這組ID將被過濾,刪除不在用戶原始集合中的任何ID。

有沒有更好的方法來做到這一點?如果不是,你能否提供任何有效的建議?

龍版

我在構建Web應用程序,允許用戶可視化組高度關聯數據和操作這些可視化來獲得組有趣的頂點作進一步的分析規劃階段。用戶通過gui執行的過濾操作將非常複雜並且很難表示爲可索引的數量。

我想允許用戶在這些數據集中執行全文搜索。通過查看what Google does for searching within a result set,他們將較早的搜索查詢簡單附加到新查詢以啓用「搜索範圍內」可能對我的數據不可行。

this question的接受答案促進了使用數據庫操作過濾來自搜索引擎的結果的想法。

作爲解決方案的一部分,我也在考慮在用戶想要搜索的頂點集足夠小以供前端處理時使用lunr作爲前端切換。弄清楚這個限制會需要一些測試,但我懷疑它會有幾千個,所以對服務器端解決方案的需求依然存在。

環境細節

我AppEngine上運行的Python 2.7。

在這個應用程序中,我期望初始結果集(將在內搜索)包含10到2000個頂點。整個數據庫中的頂點總數可能會增加幾個數量級。

回答

1

如果您嘗試使用GAE數據存儲進行分析,請使用you are going to have a bad time

數據存儲查詢非常有限,沒有對多個屬性進行不等式過濾或進行全文搜索。

您可能想看看Google BigQuery,它具有rich queries並支持正則表達式過濾。它還支持「中間表」,您可以在其中使用一個查詢的結果作爲另一個查詢的輸入數據 - 我沒有完全掌握您的問題,但看起來這是您需要的。

+0

哈哈在Southpark參考。但我承諾,這不適用於分析。 此外,它看起來像BigQuery是隻讀的,所以這不適合我。數據不會經常更改,但需要更改。儘管如此,緩存中間值以更快地解決關鍵查詢的想法可能是我可以使用的。 – turtlemonvh

+0

現在我想到了,儘管這不是直接的分析,但它確實具有這種味道。 @ stevep的建議答案提醒您[儀表如何使用mongodb進行分析](http://www.10gen.com/presentations/mongodb-analytics)。 – turtlemonvh

1

TLDNR:您可以執行一些預處理來設置客戶端可用於支持不同查詢的大型哈希字典嗎?

您的數據如何動態和大?如果您的數據相對靜態,我正在研究可能類似的東西。我們有網頁,讓用戶通過選擇約300個變量的任意組合來創建AND和OR選擇。每個變量可以有數百個與之相關的項目。由於變量的數據集相對靜態且不是很大,因此我們將它們創建爲TextProperty字段中的json.dumped文本。當被瀏覽器解析時,json簡單地變成了由變量ids鍵入的大字典。每個鍵的值都是與選定鍵相關聯的項目數組(在我們的情況下爲圖像ID)。所有的交叉點和組合都通過這些數組提供的一些小的Javascript函數完成。這非常有效 - 用戶對速度的補充,並且這種方法極大地簡化了GAE方面。所有的json變量都通過crons和taskqueue以稍微懶惰的,接近實時的方式加載/更新。爲了最終顯示,結果被格式化並插入到div的innerHTML中。一旦所有圖像都被緩存,瀏覽器對格式化和顯示數百個420x280像素圖像的響應幾乎是瞬間完成的。非常酷的看到,並致敬的瀏覽器工作人員 - 佈局和JS優化。 (我應該注意我們使用純JS來確保最小的開銷,比如JQuery。)HTH -stevep

+0

Steve - 數據與書籤程序獲得的數據類似。很多鏈接的項目由個人用戶存儲在層次結構中,並且也進行了標記。所以會有很多標籤,很多文件夾和很多項目。 – turtlemonvh

+0

你的方法聽起來很有趣,我想嘗試更多地理解它。我聽說:你有幾百張照片有300個可能的屬性,每張匹配的照片列表都存儲爲鏈接到屬性對象的字符串json數組對象。 – turtlemonvh

+0

這實際上可能適用於我。如果我將預先計算的標籤項關聯限制在每個用戶範圍內,那麼數據可能足夠小以使其工作。我要去測試一下...... – turtlemonvh