本文介绍了Solr索引中缺少ID字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我刚刚发现我的Solr索引不包含_id字段。并且不可能获得项目ID。存在UniqueId,但这并不真正有用。
public class MyClass
{
[IndexField(BuiltinFields.UniqueId)]
public string UniqueId { get; set; }
[IndexField(BuiltinFields.ID)]
public int Id { get; set; }
}
如何将项目ID添加到Solr索引?我应该向schema.xml添加什么呢?下一个字符串够吗?<field name="_id" type="string" indexed="true" stored="true" required="true" />
如果是,为什么Sitecore在为Solr生成schema.xml文件时不包括它?
我的搜索结果中的重复记录似乎也有问题:)
推荐答案
正如理查德回答的那样,solr中有一个_group
字段。如果希望将其自动转换为ID
对象,可以使用:
[TypeConverter(typeof (IndexFieldIDValueConverter))]
[IndexField("_group")]
public virtual ID ItemId { get; set; }
请记住,如果您有多个版本或语言版本,_group
字段是不够的,因为会有多个文档具有相同的_group
(Id)。在这种情况下,您可能需要使用UniqueId
-它包含有关id、版本、语言和数据库的信息:[IndexField("_uniqueid")]
public virtual string UniqueId { get; set; }
然后使用以下命令获取项目:
private Item _innerItem;
public virtual Item GetItem()
{
if (_innerItem == null)
{
ItemUri uri = new ItemUri(UniqueId);
_innerItem = Factory.GetDatabase(uri.DatabaseName).GetItem(uri.ItemID, uri.Language, uri.Version);
}
return _innerItem;
}
或者,您也可以只继承Sitecore.ContentSearch.SearchTypes.SearchResultItem
中的MyClass
,您将在那里拥有所有内置字段。
这篇关于Solr索引中缺少ID字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!