我有一个简单的检查搜索,如此;
var results = Umbraco.Search(Request.QueryString["query"], true, "MySearcher");
foreach (var result in results)
{
<h2>@result.Name</h2>
<p>Content from 'contentgrid'?</p>
}
我的问题是,如何从网格中获取一段文字? Propertyname
是contentgrid
。
查看索引,我可以看到有一个名为contentgrid
的属性包含文本,从格式化中删除等。
答案 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
事件的更多细节)。