2011-06-16 48 views
1

我有一個圖(它是一個圖形,因爲一個節點可能有許多父母),有包含以下數據節點的圖:算法搜索表示相關的特定關鍵字

  • 關鍵字ID
  • 關鍵字標籤
  • 透水搜索數
  • 深度關鍵詞推廣

的相關性我的s從1開始評分。
子節點的相關性是由父節點與子節點的距離減去關鍵字的提升深度決定的。
來自同一深度的子節點的顯示順序由先前搜索的次數決定。
有沒有一種算法能夠搜索這樣的數據結構?
如果我需要遍歷所有節點,緩存生成的結果並通過頁面顯示它們,我是否有效率問題?考慮到這對於大量用戶來說應該很好地擴展。如果我確實有問題,這怎麼解決?
需要使用哪種數據庫? NoSQL,關係數據庫還是圖形數據庫?
該計劃如何看起來像?
這可以使用django-haystack來完成嗎?

+0

什麼是您的搜索輸入和輸出? – dfb 2011-06-16 22:02:27

+0

@spinning_plate:輸入是一組關鍵字(最初一個關鍵字是足夠的,但由於開發必須支持多個關鍵字),輸出是與該關鍵字相關的值列表。 – 2011-06-16 22:16:27

回答

3

看來你試圖計算一個圖上的top-k查詢。有很多適合解決這個問題的算法,我相信最簡單的算法將幫助你解決你的問題,即當在BFS中完成對圖的遍歷時,Threshold Algorithm (TA)。一些其他top-k算法是Lawler-Murty Procedure,並存在其他TA變體。

關於效率 - 計算查詢本身可能有一個指數時間,只是由於要返回結果的指數數量,但使用時TA輸出結果之間的時間應該是比較短的問題。至於緩存&涉及的規模,通常的考慮適用 - 您可能會想要使用分佈式系統時,規模和適當的TA版本(如Threshold Join Algorithm)。當然,在選擇使用哪種數據庫解決方案時,您還需要考慮擴展性問題的緩存問題&。

就數據庫而言,您絕對應該使用支持圖形作爲一等公民(那些通常被稱爲Graph Databases)的圖形,並且我相信圖形數據庫後面的存儲引擎是相對的並不重要或NoSQL。需要注意的一點是,您可能會希望確保您選擇的數據庫能夠按照您所需的規模進行擴展(因此,對於大規模,也許您需要考慮更多分佈式解決方案)。該模式將取決於您將選擇的數據庫(假設它不會是無模式數據庫)。

最後但並非最不重要 - 乾草堆。由於草垛將一切工作,搜索引擎,你選擇使用將,應該有至少一個可能的方式工作,做到這一點(數據庫結合Apache Solr搜索和Neo4jGoldenOrb),也許更多的(我」 m不是很熟悉Haystack或者它支持的搜索引擎,而不是Solr)。

+0

第一個鏈接需要用戶名和密碼 – 2011-06-18 11:48:11

+0

糟糕。忘記我在一個內部大學網絡。我已經修復了現在的鏈接。 – Drag0nR3b0rn 2011-06-18 17:50:51