Я использую Solr.NET для индексирования данных, а затем запрашиваю их на локальном сервере Solr (Solr.net v0.4, Solr v5.3.1) и получаю странное исключения.Однозначное поле, возвращаемое как многозначное значение из запроса
Моя проиндексированы запись является простой класс (упрощенный здесь):
public class Record
{
[SolrUniqueKey]
public long Id {get;set;}
[SolrUniqueKey]
public string Data {get;set;}
}
Что я добавляю к индексу, вызвав ISolrOperations.Add(). Я не определял схему заранее - она была автогенерирована данными, которые я вложил.
В другом месте, я запрашиваю этот индекс, используя ISolrReadOnlyOperations.Query(), запрашивая только поле Id. Этот запрос, очевидно, возвращает результаты, но падает с ArgumentException:
«Не удалось преобразовать значение„System.Collections.ArrayList“в собственность„Id“документа типа My.Namespace.Record»
Это означает, что, сохраняя свойство Id как long
, оно извлекается как ArrayList
из longs
. Я получаю ту же ошибку, если пытаюсь извлечь другие поля - я храню одну строку, но получаю их коллекцию. Это приводит к сбою, потому что он пытается создать экземпляр Record
, где свойство Id
является единственным long
.
Просмотр индекса через веб-интерфейс показывает, что свойство действительно многозначное - JSON, который я вижу, содержит массив для всех свойств. Аналогично, в браузере схемы я вижу, что мои поля определены как многозначные (для свойств и схемы, а не для индексирования). В файле управляемой схемы индекса я вижу, что мои поля определены как strings
(для строковых полей) или tlongs
для числового поля.
- Почему Solr (или Solr.Net) индексирует мои однозначные поля как многозначные?
- Могу ли я предотвратить это без ручного редактирования схемы? Возможно, с помощью атрибута поля?
- Могу ли я получить только одно значение для многозначного свойства, поэтому, если я не смогу исправить схему, я могу просто извлечь данные в свой однозначный объект
Record
?
Что такое определение поля в схеме? Схема - это то, что решает, возвращается ли поле как multiValued или нет (и нет, это невозможно переопределить с клиентской стороны). – MatsLindh
@MatsLindh Нет предопределенной схемы. Данные выводятся по данным. В этом была проблема - значения по умолчанию для документов, управляемых данными, являются многозначными. –