我了解如何使用ContentSearchManager搜索项目以及如何在字段上进行构面。但我无法弄清楚如何在我在Sitecore中创建的标签上进行分析。默认情况下,UI会在它们上面,但在使用ContentSearchManager的索引中。有没有人知道它?谢谢
FacetResults facets = new FacetResults();
facets = query.Where(x => x.Language.Equals(computedLanguage)
&& (x.PageTitle.Contains(text)))
.FacetOn(facet => facet.tags).GetFacets();
答案 0 :(得分:7)
我不确定您在哪里定义了“tags”属性,因为它不是Sitecore提供的默认SearchResultItem类中定义的属性,并且您不显示“query”的声明。 “语义”实际上是您希望用于访问项目上定义的标记的GUID的属性。
现在有两种方法可以面对这些标签。您可以只关注Semantics属性以获取基于GUID的构面。然后,您将在Sitecore中查找GUID以获取标记的名称。
FacetResults facets = new FacetResults();
facets = query.Where(x => x.Language.Equals(computedLanguage)
&& (x.PageTitle.Contains(text)))
.FacetOn(facet => facet.Semantics).GetFacets();
另一种方法是在搜索索引中实际存储标记名称。这为您提供了额外的好处,允许用户轻松搜索标记名称。
将标记名称存储在索引中的计算字段如下所示:
public class TagsFacet : IComputedIndexField
{
public object ComputeFieldValue(IIndexable indexable)
{
var indexableItem = indexable as SitecoreIndexableItem;
if (indexableItem == null)
{
return null;
}
if (indexableItem.Item.Fields["__Semantics"] == null) return null;
MultilistField tags = indexableItem.Item.Fields["__Semantics"];
var tagNames = tags.GetItems().Select(tag => tag.Name).ToList();
return tagNames;
}
public string FieldName { get; set; }
public string ReturnType { get; set; }
}
您需要在raw:AddComputedIndexField部分中将计算字段添加到Sitecore.ContentSearch.LuceneDefaultIndexConfiguration.config(假设您使用的是Lucene):
<field fieldName="tagsfacet">SitecoreBase72.TagsFacet,SitecoreBase72</field>
然后,您需要扩展SearchResultItem类以添加新字段名称:
public class CustomSearchModel : SearchResultItem
{
[IndexField("tagsfacet")]
public List<String> tagsFacet { get; set; }
}
最后,您可以在标记字段(重建索引后)上进行分析:
var searchIndex = ContentSearchManager.GetIndex("sitecore_master_index");
using (var context = searchIndex.CreateSearchContext())
{
var myTagFacets = new FacetResults();
myTagFacets = context.GetQueryable<CustomSearchModel>()
.FacetOn(facet => facet.tagsFacet)
.GetFacets();
foreach (var facetCategories in myTagFacets.Categories)
{
foreach (var facet in facetCategories.Values)
{
Log.Info(string.Format("Facet:{0} Results:{1}",facet.Name,facet.AggregateCount),this);
}
}
}