如何使用ContentSearchManager查看Sitecore标记

如何使用ContentSearchManager查看Sitecore标记,sitecore,sitecore7,Sitecore,Sitecore7,我了解如何使用ContentSearchManager搜索项目以及如何在字段上刻面。但我不太明白如何在我在Sitecore中创建的标签上刻面。默认情况下,UI在它们上刻面,但在索引中使用ContentSearchManager。有人知道吗?多谢各位 FaceResults facets=新的FaceResults(); facets=query.Where(x=>x.Language.Equals(computedLanguage) &&(x.PageTitle.Contains(text)))

我了解如何使用ContentSearchManager搜索项目以及如何在字段上刻面。但我不太明白如何在我在Sitecore中创建的标签上刻面。默认情况下,UI在它们上刻面,但在索引中使用ContentSearchManager。有人知道吗?多谢各位

FaceResults facets=新的FaceResults();
facets=query.Where(x=>x.Language.Equals(computedLanguage)
&&(x.PageTitle.Contains(text)))
.FacetOn(facet=>facet.tags).GetFacets();

我不确定您在哪里定义了“tags”属性,因为它不是Sitecore提供的默认SearchResultItem类中定义的属性,并且您没有显示“query”声明。“语义”实际上是您希望用于访问在项目上定义的标记的GUID的属性

现在有两种方法可以在这些标签上刻面。您可以在语义属性上使用facet来获取基于GUID的facet。然后,您将在Sitecore中查找GUID以获取标记的名称

FaceResults facets=新的FaceResults();
facets=query.Where(x=>x.Language.Equals(computedLanguage)
&&(x.PageTitle.Contains(text)))
.FacetOn(facet=>facet.Semantics).GetFacets();
另一种方法是将标记名实际存储在搜索索引中。这为您提供了额外的好处,允许用户轻松地按标记名进行搜索

用于在索引中存储标记名称的计算字段如下所示:

公共类标记面:IComputedIndexField
{
公共对象ComputeFieldValue(可索引)
{
var indexableItem=可作为SitecoreIndexableItem索引;
if(indexableItem==null)
{
返回null;
}
if(indexableItem.Item.Fields[“\uuu语义”]==null)返回null;
MultilistField标记=indexableItem.Item.Fields[“_语义”];
var tagNames=tags.GetItems().Select(tag=>tag.Name).ToList();
返回标记名;
}
公共字符串字段名{get;set;}
公共字符串返回类型{get;set;}
}
您需要将计算字段添加到原始:AddComputedIndexField部分的Sitecore.ContentSearch.LuceneDefaultIndexConfiguration.config(假设您使用的是Lucene):

SitecoreBase72.TagsFacet,SitecoreBase72
然后需要扩展SearchResultItem类以添加新字段名:

公共类CustomSearchModel:SearchResultItem
{
[索引字段(“标记面”)]
公共列表标记面{get;set;}
}
最后,您可以在标记字段上刻面(一旦重建索引):

var searchIndex=ContentSearchManager.GetIndex(“sitecore\u master\u index”);
使用(var context=searchIndex.CreateSearchContext())
{
var myTagFacets=新的FacetResults();
myTagFacets=context.GetQueryable()
.FacetOn(facet=>facet.tagsFacet)
.GetFacets();
foreach(myTagFacets.Categories中的var facetCategories)
{
foreach(facetCategories.Values中的变量facet)
{
Log.Info(string.Format(“Facet:{0}结果:{1}”、Facet.Name、Facet.AggregateCount)、this);
}
}
}

我不确定您在哪里定义了“tags”属性,因为它不是Sitecore提供的默认SearchResultItem类中定义的属性,并且您没有显示“query”声明。“语义”实际上是您希望用于访问在项目上定义的标记的GUID的属性

现在有两种方法可以在这些标签上刻面。您可以在语义属性上使用facet来获取基于GUID的facet。然后,您将在Sitecore中查找GUID以获取标记的名称

FaceResults facets=新的FaceResults();
facets=query.Where(x=>x.Language.Equals(computedLanguage)
&&(x.PageTitle.Contains(text)))
.FacetOn(facet=>facet.Semantics).GetFacets();
另一种方法是将标记名实际存储在搜索索引中。这为您提供了额外的好处,允许用户轻松地按标记名进行搜索

用于在索引中存储标记名称的计算字段如下所示:

公共类标记面:IComputedIndexField
{
公共对象ComputeFieldValue(可索引)
{
var indexableItem=可作为SitecoreIndexableItem索引;
if(indexableItem==null)
{
返回null;
}
if(indexableItem.Item.Fields[“\uuu语义”]==null)返回null;
MultilistField标记=indexableItem.Item.Fields[“_语义”];
var tagNames=tags.GetItems().Select(tag=>tag.Name).ToList();
返回标记名;
}
公共字符串字段名{get;set;}
公共字符串返回类型{get;set;}
}
您需要将计算字段添加到原始:AddComputedIndexField部分的Sitecore.ContentSearch.LuceneDefaultIndexConfiguration.config(假设您使用的是Lucene):

SitecoreBase72.TagsFacet,SitecoreBase72
然后需要扩展SearchResultItem类以添加新字段名:

公共类CustomSearchModel:SearchResultItem
{
[索引字段(“标记面”)]
公共列表标记面{get;set;}
}
最后,您可以在标记字段上刻面(一旦重建索引):

var searchIndex=ContentSearchManager.GetIndex(“sitecore\u master\u index”);
使用(var context=searchIndex.CreateSearchContext())
{
var myTagFacets=新的FacetResults();
myTagFacets=context.GetQueryable()
.FacetOn(facet=>facet.tagsFacet)
.GetFacets();