2016-06-20 128 views
0

早上好使用Solr SolrNet突出顯示5.4.1

我能夠保留一個斷點並查看結果。亮點

我的視圖模型

[SolrField("health_content_t")] 
    public string HealthContent { get; set; } 

    [SolrField("description_t")] 
    public string Description { get; set; } 

    [SolrField("title_t")] 
    public string Title { get; set; } 

    [SolrField("_fullpath")] 
    public string PageUrl { get; set; } 

我的控制器

var queryOption = new QueryOptions 
      { 
       FilterQueries = BuildFilterQueries(parameters), 
       Rows = parameters.PageSize, 
       Start = start, 
       SpellCheck = new SpellCheckingParameters 
       { 
        Collate = true 
       }, 
       Highlight = new HighlightingParameters 
       { 
        Fragsize = 250, 
        Fields = new[] { "*" }, 
        BeforeTerm = "<b>", 
        AfterTerm = "</b>", 
        Snippets = 1 
       } 

      }; 

var results = _searchResults.Query(BuildQuery(parameters), queryOption); 

view = new SearchView 
{ 
     EntireSiteResults = results, 
     Search = parameters, 
     TotalCount = results.NumFound, 
     DidYouMean = GetSpellCheckingResult(results) 
}; 

我查看

@foreach (var item in Model.EntireSiteResults) 
    { 
     <li> 
      <h2><a href="@item.PageUrl">@item.Title</a></h2> 
      <span class="sr-url"><a href="@item.PageUrl">@item.PageUrl</a></span> 
      <p>@item.Description</p> 
     </li> 
    } 

我不知道我經歷的結果如何迭代。我將不得不顯示

標題,PAGEURL,用粗體搜索項,也表明以粗體顯示的搜索字詞healthContent

貌似我必須通過results.Highlights每個字段的迭代的片段?

任何指導,請

回答

1

[注:這個問題最初發布在GitHub上,但我建議採取SO額外的答案]

你必須先指定要使用高亮和在其上領域。 *是「好」,但不是很好,如果你有很多你不想突出顯示的領域 - 也取決於你的qf。但無論如何,您需要:

在QueryOptions中設置突出顯示的參數並將其傳遞給.Query() 然後,當您獲得結果時,將獲得標題,PageUrl和描述而不顯示高亮。您需要迭代響應中的高亮對象,該對象具有唯一鍵作爲鍵,然後提取您正在尋找的突出顯示的字段。如果這是令人困惑的,請在查詢(var results = ...)後立即在斷行上添加斷點,然後檢查results.Highlights。

一旦你在文檔頁面顯示您可以遍歷結果:

foreach (var h in results.Highlights[results[0].Id]) { 
    Console.WriteLine("{0}: {1}", h.Key, string.Join(", ", h.Value.ToArray())); 
} 

當你迭代的亮點,你可以看到每一個結果是一個片段,該ID將是獨一無二的鍵。然後,在每個h中,您將獲得一個KeyValuePair,其中h.Key是您正在查找的字段,即標題。 h.值是返回的所有片段的列表,因爲您可以有許多片段。如果你得到第一個,你應該沒問題。

參考參考 https://github.com/mausch/SolrNet/blob/master/Documentation/Highlighting.md