我刚刚发现我的 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 文件期间不包含它?
看来我也有搜索结果中重复记录的问题:)
正如理查德回答的那样,有一个_group
Solr 中的字段。如果你想让它自动翻译成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; }
然后获取 Item 使用:
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;
}
或者你可以继承你的MyClass
from Sitecore.ContentSearch.SearchTypes.SearchResultItem
你将在那里拥有所有内置字段。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)