我发现我的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文件时没有包含它?
似乎搜索结果中的重复记录可能也是一个问题,我也有:)
答案 0 :(得分:3)
理查德回答说,索尔有一个_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; }
然后使用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
继承Sitecore.ContentSearch.SearchTypes.SearchResultItem
,然后您将拥有所有内置字段。
答案 1 :(得分:1)
在SOLR中,项目ID字段称为1
- 生成它时应将其添加到schema.xml文件中。
如果不存在,这就是我的定义:
_group
UniqueId字段包含ItemId以及项目的版本和语言。