Umbraco:在搜索结果中获取网格内容?

时间:2017-06-26 10:04:01

标签: c# asp.net razor umbraco examine

我有一个简单的检查搜索,如此;

var results = Umbraco.Search(Request.QueryString["query"], true, "MySearcher");
foreach (var result in results)
{
<h2>@result.Name</h2>
<p>Content from 'contentgrid'?</p>
}

我的问题是,如何从网格中获取一段文字? Propertynamecontentgrid。 查看索引,我可以看到有一个名为contentgrid的属性包含文本,从格式化中删除等。

2 个答案:

答案 0 :(得分:1)

您好我写了一些代码,允许您在umbraco中进行更高级的搜索。

本文为您提供了该代码。 http://www.codeshare.co.uk/blog/how-to-search-by-document-type-and-property-in-umbraco/

我用它在我的网站上搜索。不匹配的单词仅出现在我网站的一篇文章的内容网格中。以下搜索网址证明它有效。

http://www.codeshare.co.uk/search/?query=mismatched

亲切的问候

答案 1 :(得分:0)

我认为你可以采取两种方法。

一种是在Examine索引中添加自定义字段,然后使用GatheringNodeData事件,索引要显示的文本。这样您就可以从SearchResult对象(@result.Fields["customFieldName"])访问它。 GatheringNodeData事件处理程序必须解析网格数据以提取所需的文本片段,然后将其添加到检查文档(e.Fields["content"] = textSnippet)。

另一种方法是在显示结果时从节点获取文本片段。

var helper = new UmbracoHelper(UmbracoContext.Current);
foreach (var result in results)
{
  var node = helper.TypedContent(result.Id);
  var gridData = node.GetPropertyValue("contentgrid");
  // some code for extracting the text snippet from the grid data
}

请注意,在这两种技术中,您需要弄清楚如何从网格数据中提取所需的文本片段。你可以使用Skybrud.Umbraco.GridData或者自己解析JSON(使用JSON.NET)。我认为昨天在评论中提到的post @Harvey会对此有所帮助(以及有关处理GatheringNodeData事件的更多细节)。