有人在使用SOLR时为关键字标记生成器提供了sitecore索引配置的示例吗? 我试图在具有多字符串的字段上进行分面,但是当前返回的构面正在分割字段中的单词并返回构面。
EG。我有一个国家领域的项目,我正试图在州领域 - 其价值像新罕布什尔州,南达科他州。
但是在结果中,我得到了分面值
Name = New,Aggregate = xx
名称=汉普郡,总数= xx
名称=南,聚合= xx
名称= Dakota,Aggregate = xx
有人可以帮助我使用正确的配置来改变它吗?
这是我目前的配置:
<index id="site_search_web_index" type="Sitecore.ContentSearch.SolrProvider.SolrSearchIndex, Sitecore.ContentSearch.SolrProvider">
<param desc="name">$(id)</param>
<param desc="core">site_search_web</param>
<param desc="propertyStore" ref="contentSearch/databasePropertyStore" param1="$(id)" />
<strategies hint="list:AddStrategy">
<strategy ref="contentSearch/indexUpdateStrategies/onPublishEndAsync" />
</strategies>
<locations hint="list:AddCrawler">
<crawler type="Sitecore.ContentSearch.SitecoreItemCrawler, Sitecore.ContentSearch">
<Database>web</Database>
<Root>/sitecore/content/Home</Root>
</crawler>
</locations>
</index>
答案 0 :(得分:4)
您可以通过以下解决方案之一实现此目标:
解决方案1
您可以创建一个返回构面值的计算字段,并将计算字段类型设置为&#34; string&#34;避免标记化。 您的计算字段应如下所示:
public class TitleComputedField : IComputedIndexField
{
public object ComputeFieldValue(IIndexable indexable)
{
if (indexable == null) throw new ArgumentNullException("indexable");
var scIndexable = indexable as SitecoreIndexableItem;
if (scIndexable == null)
{
Log.Warn(
this + " : unsupported IIndexable type : " + indexable.GetType(), this);
return false;
}
var item = (Item)scIndexable;
if (item == null)
{
Log.Warn(
this + " : unsupported SitecoreIndexableItem type : " + scIndexable.GetType(), this);
return false;
}
if (String.Compare(item.Database.Name, "core", StringComparison.OrdinalIgnoreCase) == 0)
{
return false;
}
return = item.Fields["Title"];
}
public string FieldName { get; set; }
public string ReturnType { get; set; }
}
并在Sitecore.ContentSearch.Solr.Indexes.config中配置计算字段,如下所示:
<fields hint="raw:AddComputedIndexField">
...
<field fieldName="plaintitle" returnType="string">YourNamespace.TitleComputedField, YourAssembly</field>
</fields>
最后,如果你面对&#34; plaintitle&#34;字段,你应该得到预期的结果。
解决方案2
您可以通过更新solr schema.xml来在索引级别创建字段,如下所示:
在solr中创建一个字符串
的新字段<fields>
...
<field name="plaintitle" type="string" indexed="true" stored="true" />
</fields>
然后创建一个&#34; copyfield&#34;将原始字段复制到新字段
<copyField source="title_t" dest="plaintitle" />
在两个解决方案中,您可以使用以下代码在新字段上进行分析:
query.FacetOn(i => i["plaintitle"]);