2012-01-05 85 views
0

我將這個問題提出來的「更大的創造性」的一些建議可能會解決這個問題的搜索方法。我想出了一個有點人爲的例子來試圖解釋這個問題,以至於可能會推薦一些解決方案。對搜索方法的要求建議

問題: 我們使用的是關係數據庫(MSSQL),並需要通過產品搜索有以下限制:

  • 可用性
  • 市場
  • 價格

我們還需要對 進行分組和排序 - 價格 - 市場 - 較大的實體彙總

讓我看看,如果我能解釋採用半真實世界的實體:

想到一個應用程序,允許用戶搜索酒店房間,他們可以預訂的。以下標準可能適用於搜索: - 預訂房間的日期爲 - 他們想要酒店房間的市場(紐約市,波士頓等) - 酒店房間的設施可能會有(熱水浴缸,壁爐 - 牀 數量 - 套房與否

在所有情況下,搜索標準以上可能會或可能不會選擇那麼,一個非常廣泛的搜索是可能的(在上述日期,不要」 (在紐約市,2張牀,有壁爐)

爲了增加複雜性,我們還需要返回所選標準的酒店房間的價格。顯然,特殊的價格結冰,不同的住宿天數的價格(週四晚上的一個價格和週末和週六晚上的週末住宿的不同價格)。

了一些我們已經合作過身邊的事情是: - Solr的 - Endeca的 - SQL查詢 - 在C#代碼實現和優化時/在必要時(認爲裝飾模式)

我」什麼m在這裏尋找的是一些來自社區的建議 - 以上哪個不適合這個問題 - 哪個可能適合這個問題 - 哪種其他技術可能效果更好,我們還沒有想過 - 其他人在類似的問題上運用的技術運行良好(非技術特定fic)

如果您有任何想法或建議,請事先致謝。我將嘗試在這個問題上應用適當的標籤,但是我已打開並且可以添加/刪除以幫助您獲得正確的答案。

+0

您是否考慮在http://programmers.stackexchange.com/上提問此問題? – 2012-01-05 18:35:48

+0

封閉爲跨網站欺騙:http://programmers.stackexchange.com/questions/128696/suggestions-for-search-methodology-requested – casperOne 2012-01-06 19:48:47

回答

1

你所描述的內容歸結爲具有屬性的實體。我花了很多時間處理類似問題,其中產品和屬性可能是任何東西(例如類別,條件,價格,顏色等)的實體。產品不必共享屬性,儘管存在一個共同的設置。

我最終得到的解決方案是使用lucene(.net在我的情況)。不過,我會建議你使用Solr,因爲它更容易使用它的過濾功能(有一個特定的原因,我不能使用它,但它可能是更簡單的解決方案...雖然它很容易起牀和運行Lucene.net)。基本的想法是,你創建文檔時將你的屬性作爲屬性。然後設計一些可以傳遞給搜索代碼的對象,該對象列出了用戶在他們想要過濾的值上搜索的屬性。之後,使用該對象在Lucene中建立一個查詢來檢索您想要的文檔非常容易。

如果需要的話,實現分頁相對比較簡單。我在Solr中發現的一個優點是它可以很容易地計算屬性組(例如,我可以搜索「Nikon」,並且可以將所有帶有「Nikon」的文檔返回給它們,從而將屬性分組,例如不同的類別或不同的顏色....你可以使用Lucene來做到這一點,但更多的工作)。

我對Lucene的解決尋找不同的搜索選項後,其花費的時間implmenting使用SQL Server的搜索功能的功能公平一點,但我發現Lucene的是更快,它看起來是壓在我DB服務器(和我收集Stack OverFlow本身已從使用SQL Server的搜索轉移到Lucene)Stack Overflow Search