2015-07-13 92 views
0

我想獲得每個返回結果項目的得分值,但問題是所有項目返回相同的得分值。我正在使用從sitecore 6.6升級的sitecore 7.2站點。我使用Solr的版本4.10.2-0Sitecore Solr搜索得分值

以下是我使用的代碼:

var contentPredicate = PredicateBuilder.True<customSearchResultItem>(); 
contentPredicate = contentPredicate.And(p => p.Content.Matches(SearchKey.Boost(1.0f))); 

IQueryable<SearchResultItem> query = context.GetQueryable<customSearchResultItem>().Where(contentPredicate); 

var hits = query.GetResults().Hits; 

foreach (var item in hits) 
{ 
    scores.Add(item.Score); 
} 

請您告知,如果缺少了什麼?或者是否有任何應用來完成此項工作的配置?

+0

評分的價值是什麼? –

+0

你嘗試過不同的'SearchKey'值嗎?你可以嘗試使用'p.Content.Contains'還是'p.Content.Like'並查看它們是否返回不同的分數? –

+0

基於關鍵字搜索得分值正在變化,因爲結果項目會有所不同,但它對於返回的所有項目始終是相同的值:現在是1.811966 –

回答

0

下應該存在於應用提升功能,並據此排序項:

  • 搜索應該與一個以上的條款,否則retrived項目將具有相同的分數值
  • 當搜索包含除了子句(謂詞)之外,它們將在得分值上具有相同的權重,除非應用增強方法「.Boost(10.0f)。
  • 子句之間的組合應該是」OR「,否則返回的項必須匹配所有謂詞這意味着相同的得分值。
2

在Sitecore知識庫中有一篇關於這個帖子的文章,指出hit的分數乘以0,因此所有結果都有相同的分數。

該帖子與Lucene相關,但我相信它與Solr也有關係。

要解決

  1. 在Sitecore的導航到 /sitecore/templates/System/Templates/Sections/Indexing部分。
  2. 爲此部分創建標準值項目。
  3. 在上述標準值項目的Boost Value字段中輸入值1。
  4. 保存,發佈和重指數

由於你是一個升級版6.6,ContentSearch出現之前,標準值是不存在的,也沒有在升級腳本創建的實例。

+0

我試過了,它仍然是所有項目的相同值:https://kb.sitecore。net/articles/524252 –

+0

好吧我嘗試了兩個子句,現在從一個項目到另一個項目的得分值是不同的,現在的問題是,如果我想測量一個字段的搜索精度,比如示例中的匹配數量)是否可以使用提升來做到這一點?如果沒有,是否有另一種方式來做到這一點? 最後要顯示的百分比表明基於關鍵字搜索內容字段的結果項目的準確性? –