2016-01-24 102 views
0

我有一個索引正在生成完全正常(可以瀏覽所有創建的項目通過盧克)。在Luke中做了一個查詢,甚至設法返回結果 - 在C#中的下面的代碼中實現,但不返回。有什麼明顯的,我失蹤了。Lucene在Sitecore中搜索;沒有結果返回

  totalResults = 0; 
     using (var context = ContentSearchManager.GetIndex("custom_search_index").CreateSearchContext()) 
     { 
      var filterPredicate = PredicateBuilder.True<SearchItem>(); 
      var termPredicate = PredicateBuilder.False<SearchItem>(); 

      termPredicate = termPredicate 
           .Or(p => p.Name.Like(keyword, 0.75f)).Boost(2.0f) 
           .Or(p => p.Excerpt.Like(keyword)) 
           .Or(p => p.SearchTags.Like(keyword)) 
           .Or(p => p.HtmlContent.Like(keyword)); 

      var predicate = filterPredicate.And(termPredicate); 
      var query = context.GetQueryable<SearchItem>().Where(predicate); 

      var results = query.Page(page, itemsPerPage).GetResults(); 

      totalResults = results.TotalSearchResults; 
      var result = results.Hits.Select(h => GetPage(h.Document)).ToArray(); 

      return result; 
     } 
在Search.Log

,我發現了以下打

ExecuteQueryAgainstLucene(custom_search_index):_name:20世紀80年代〜0.75摘錄:1980 searchtags:20世紀80年代h​​tmlcontent:1980 - 過濾器:

如果我在盧克運行'_name:1980s〜0.75節選:20世紀80年代searchtags:20世紀80年代h​​tmlcontent:20世紀80年代',我確實得到了一個結果!

+1

可以肯定的是,您是否在相同的自定義索引上使用了Luke,即'custom_search_index'? 'totalResults'也是0,'GetPage()'函數返回什麼? –

+0

是在兩個實例中使用相同的索引。 GetPage()將項目映射到Sitecore項目以獲取更多詳細信息。 – Daniel

+1

問題只與'80年代'有關嗎?你嘗試過使用字母查詢嗎? –

回答

0

所以,如果我使用下面的代碼:

var results = query.Page(page, itemsPerPage).GetResults(); 

其中頁面1和itemsPerPage是5,但我的篩選結果只返回一個值(或小於itemsPerPage)GetResults()返回沒有結果!

+2

你試過'page = 0'嗎? –

+1

是的,'頁面'值是從零開始的。 'Page(..)'擴展方法的代碼是這樣的:'Queryable.Take (Queryable.Skip (source,page * pageSize),pageSize)'所以它會首先跳過1 * 5然後'拿5件物品。 –

1

大多數情況下,這表示索引已過期。例如,結果指出的項目已被刪除或尚未發佈。重建索引應導致Luke和Sitecore返回相同。

此外,檢查您的分頁是否不排除結果。也許先嚐試不用分頁。

+0

如果我刪除了查詢中的where子句,我確實得到了所有的頁面!所以問題似乎是關於過濾部分。 – Daniel

+1

或者在分頁部分,因爲沒有過濾,你可能會得到很多滿足分頁參數的結果。 –

+0

這很奇怪,如果我過濾並排除尋呼機它返回一個匹配(因爲它應該)!如果有一個結果,爲什麼傳呼機不會返回? – Daniel

1

從其他評論看來,你似乎正在使用page = 1獲得結果的第一頁。

page參數是從零開始,這意味着如果你想在第一頁,你必須使用0

// This will return the first 5 results (page 1) 
query.Page(0, 5).GetResults(); 

// This will return the next 5 results (page 2) 
query.Page(1, 5).GetResults(); 

這可以通過查看該Page(..)擴展方法的代碼進行驗證:

return Queryable.Take<TSource>(Queryable.Skip<TSource>(source, page * pageSize), pageSize); 
+0

謝謝,是的後語意識到它是零基礎! – Daniel

相關問題