2015-10-20 136 views
2

我正在構建一個sitecore索引搜索,並根據我輸入的關鍵字返回結果。是否有一種方法可以知道哪個項目的關鍵字點擊最多,並且可以使用這些匹配進行排序?Sitecore索引搜索

var index = ContentSearchManager.GetIndex("passport_index"); 
using (var context = index.CreateSearchContext()) 
{ 
    var predicate = PredicateBuilder.True<SearchResultItem>(); 
    foreach (var t in baseQuery.Split(' ')) 
    { 
     var tempTerm = t; 
     predicate = predicate.Or(p => p.Content.Contains(tempTerm)); 
    } 
} 

回答

2

這是默認行爲,所以您不需要應用排序。

結果按score排序。導致評分的主要因素是該術語在文檔中出現的次數。

引述the Lucene website

在一般情況下,後面的VSM(向量空間模型)的想法是 多次查詢檢索詞出現在相對的時間期限出現在數 文檔集合中的所有文檔, 與該文檔更相關的查詢。

3

正如馬丁所說 - 默認情況下它將按照得分降序排列。但是,您也可以使用GetResults擴展方法獲得分數值。

在你的榜樣,你這樣做:

var index = ContentSearchManager.GetIndex("passport_index"); 
using (var context = index.CreateSearchContext()) 
{ 
    var predicate = PredicateBuilder.True<SearchResultItem>(); 
    foreach (var t in baseQuery.Split(' ')) 
    { 
     var tempTerm = t; 
     predicate = predicate.Or(p => p.Content.Contains(tempTerm)); 
    } 
    var query = context.GetQueryable<SearchResultItem>().Where(predicate); 
    var results = query.GetResults(); 

    // Get total results 
    var total = results.TotalSearchResults; 

    var hits = results.Hits.OrderByDescending(x => x.Score).Select(x => x.Document); 
} 

results.Hits返回IEnumerable<SearchHit<SearchResultItem>> - 在SearchHit包含一個文件,這是結果和比分,這是一個包含關聯得分爲文檔的浮動。