2013-05-20 58 views
3

我有一個MVC應用程序,我需要能夠搜索。該應用程序是模塊化的,因此模塊需要很容易地註冊數據以通過搜索模塊進行索引。如何將搜索索引與MVC中的模型相關聯?

目前,只有一個快速的臨時解決方案適合靈活性,但速度總是會成爲問題。模塊註冊他們想要搜索的模型(以及關係和列)。在搜索時,搜索功能使用這些關係查詢數據,並應用Levenshtein,刪除停用詞,替換字符等。顯然,隨着數據量的增加,這會減慢,因此無法保留,因爲它是有效的,然後通過數據。

上述的好處是,與找到數據的模型有直接關係。例如,如果Model_Product發現某些內容,我知道在我的代碼中,我可以使用Model_Product::url()將結果關聯到相關位置或Model_Product::find(other data)以顯示圖像或描述,例如在標題中找到關鍵字。

上述的另一個好處是它已經是數據庫特定的,因此可以放在虛擬主機上並且可以工作。

我已閱讀各種選項,它們看起來都非常相似,所以人們不可能在不煽動討論或辯論的情況下提出「正確」的建議,而是爲了記錄;從以下選項中,Solr似乎是我所傾向的那個。我不是一成不變的,所以如果任何人有任何建議,他們想分享或其他選項,我可以看看,那會很好。

通過各種教程和指南尋找他們似乎都比較容易設置和配置。在上面的例子中,我可以讓模塊註冊配置文件/搜索索引模型的路徑,並讓搜索者通過搜索程序x運行它們。這將構建我的索引,並提供查詢數據的方法。精細。

我不明白的是這些索引中的任何一個與我的其他代碼有什麼關係。如果我索引數據,搜索並反過來找到一個說Solr的結果,我怎麼知道如何獲得所有與它找到的位相關的所有其他信息?

也是有人能夠確認我是否需要每個虛擬主機有上述任何一個實例?這是我似乎無法找到很多信息的東西。我會假設我可以連接到一個實例並告訴它哪些數據是相關的?很像連接到單個DBMS服務器,憑證x到數據庫y。

准許我沒有做過這方面的廣泛閱讀,因爲我通常會這樣做,因爲我目前在方向上有點卡住,我寧願不讀所有關於尋求建議的一切信息來自那些在我採取特定路線之前知道的人。

編輯:This question似乎讓我更加傾向於Solr。還有一個類似的線程here與獅身人面像相當的洞察力。

回答

0

免責聲明:我只能說Lucene/Solr,我相信ElasticSearch,因爲我知道它是基於Lucene。其他人可能會也可能不會以同樣的方式工作。

如果我索引數據,搜索,進而找到說Solr的,怎麼 我知道如何讓所有的相關位 其他信息,它找到了一個結果?

您可以存儲您想要的任何額外數據,例如,指向數據庫中特定行的數據庫密鑰。 Lucene/Solr還可以幫助您查找相關信息,例如如果您運行DVD租賃店並且用戶拼錯了電影名稱,Lucene會爲您解決這個問題,並且(與DB不同)仍然列出最接近的替代方案。您還可以在索引或查詢期間通過提高某些字段提供提示。 geospatial search等有特殊擴展名,如果需要,顯然你可以提供你自己的。

也有人能夠確認我是否需要有一個 上述任何虛擬主機的實例?

Lucene是一個低級別的庫,並且必須存在於您運行的每個JVM中。 Solr(建立在Lucene之上)是一個HTTP服務器。您可以根據需要從儘可能多的客戶端調用它。更多縮放選項解釋here

+0

要添加:ElasticSearch與Solr一樣也是http服務器。 –

+0

我怎麼能指定一個特定的模型名稱,或者在數據集中找不到的信息,但是關於帶有索引信息的數據集。例如,如果我爲我的「產品」表編制索引,我希望索引能夠返回到Model_Product,以便知道行ID,因此可以使用Model_Product獲取與結果相關的信息,但不一定在該特定行,即相關表。我還沒有找到有關如何做到這一點的信息。 –

+0

您需要將數據結構非規範化爲平面文檔。換句話說,您需要將外鍵存儲到另一個實體,以便可以檢索,或索引相關的實體字段,或兩者。 – mindas