Solr索引中缺少Id字段

时间:2015-08-12 16:34:05

标签: solr sitecore sitecore8

我发现我的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文件时没有包含它?

似乎搜索结果中的重复记录可能也是一个问题,我也有:)

2 个答案:

答案 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以及项目的版本和语言。