2015-08-12 3 views
3

Я просто узнаю, что мой индекс Solr не содержит поля _id. , и невозможно получить идентификатор элемента. UniqueId присутствует, но это не очень полезно.Отсутствует поле Id в индексе Solr

public class MyClass 
{ 
    [IndexField(BuiltinFields.UniqueId)] 
    public string UniqueId { get; set; } 

    [IndexField(BuiltinFields.ID)] 
    public int Id { get; set; } 
} 

Как добавить идентификатор товара в индекс Solr? Что следует добавить к schema.xml? Достаточно ли следующей строки?

<field name="_id" type="string" indexed="true" stored="true" required="true" /> 

Если да, то почему Sitecore не включает его во время сборки файла schema.xml для Solr?

Кажется, что это может быть проблема с дублированием записей в результатах поиска, что у меня есть, а :)

ответ

3

Как ответил Ричард, в Сольре есть поле _group. Если вы хотите, чтобы это было автоматически переводится в ID объект, вы можете использовать:

[TypeConverter(typeof (IndexFieldIDValueConverter))] 
[IndexField("_group")] 
public virtual ID ItemId { get; set; } 

Помните, что если у вас есть несколько версий или языковых версий, _group поле не будет достаточно, потому что там будет несколько документов с тем же _group (id). В этом случае вы можете использовать UniqueId - содержит информацию о ид, версии, языка и базы данных:

[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; 
} 

Или вы можете просто унаследовать MyClass от Sitecore.ContentSearch.SearchTypes.SearchResultItem, и у вас будут все встроенные поля.

1

В ГУМЗЕ Позиционного поле Id называется _group - это должно быть добавлено к файлу schema.xml когда это вы его создаете.

Если его нет, то это определение у меня есть:

<field name="_group" stored="true" indexed="true" type="string"/> 

Поле UniqueID содержит ItemId вместе с версией языка и данного пункта.

Смежные вопросы