2013-09-25 41 views
1

嗨,我是在我的.cshtml網站創建一個內部的搜索引擎。如何建立一個內部的搜索引擎爲對象

引擎將搜索對象列表。並且將基於搜索條件返回一個列表。

返回的列表是通過搜索詞多少次都在有序的對象,如果它是在對象的頭部。

的對象有一個header和會是通過搜索content。兩者都是字符串。

我的問題是如何去這在最有效的方式,因爲我想了很多循環和臨時名單。但是這需要很長的響應時間。二進制搜索會更好嗎?如何? 或者如果有一個應用程序已經可以做到這一點,並允許我自己設計輸出。

PS:所有的對象都是從數據庫中是否有幫助。

+1

'header'和'content'是簡單的字符串屬性嗎? – Corak

+1

如果您擔心性能,最好在數據庫中完成。 SQL Server有一個全文搜索組件,可以使事情變得更簡單。 –

+1

此外,二進制搜索將用於排序的數據 - 就像索引一樣。我認爲這不適用於此。 –

回答

2

我不習慣剃刀也不ASP.net,但在C#與對象的列表,這是可以做到給人一種重量到您的是searchPattern每個對象並責令重量的列表:

var searchPattern = "word1|word2"; 
var regex = new Regex(searchPattern); 
var search = list.Select(o => 
         new { Weight = regex.Matches(o.Header).Count * 20 
            + regex.Matches(o.Content).Count * 10, 
           Value = o}) 
        .OrderByDescending(o => o.Weight); 

這可以,如果你在一個數據庫中的對象進行rewriten作爲一個SQL查詢,似乎是SQL Server的LIKE支持正則表達式。

+0

如何將SQL看起來像 –

+0

我試過這個,但我得到的所有對象,似乎是一個隨機順序。但是,如果我只想顯示一個包含搜索詞的對象列表 –

+1

我對sql沒有足夠的效率,但我會嘗試創建查詢。如果你想喲只顯示文字添加.Where(o => o.Weight> 0)的對象 – Blau