-1

我有一个像这样的简单检查搜索;

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包含文本的属性,从格式等中剥离。

4

2 回答 2

1

嗨,我写了一些代码,让您可以在 umbraco 中进行更高级的搜索。

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

我用它来搜索我的网站。mismatched 一词仅出现在我网站的一篇文章的内容网格中。下面的搜索 url 证明它有效。

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

亲切的问候

保罗

于 2017-06-30T09:06:27.390 回答
0

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

一种是在检查索引中添加一个自定义字段,然后使用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)。我认为昨天在评论中提到的@Harvey帖子对此会有所帮助(以及有关处理GatheringNodeData事件的更多详细信息)。

于 2017-06-27T22:36:23.803 回答