Сейчас я трачу несколько часов на эту проблему, но пока не повезло. Так что обращайтесь за помощью к сообществу.
У меня есть шаблон данных под названием Product
с полем под названием ProPrice
, и некоторый контент, основанный на этом шаблоне, я включил индексацию всех полей, используя конфигурацию <indexAllFields>true</indexAllFields>
. Когда я перестраиваю индекс, я вижу поле индекса (proprice
) вместе с терминами, правильно сохраненными в Lucene (проверено с помощью Luke).
Теперь я использую Sitecore 7 ContentSearch API для извлечения контента из индекса Lucene. И для этого я создал объект POCO с именем Product
, который наследуется от SearchResultItem
, а также добавил свойство для цены, как показано ниже:
[IndexField("proprice")]
public double Price { get; set; }
Однако следующий запрос LINQ не возвращает никаких данных:
var products = context.GetQueryable<Product>().Where(p => p.Price == 4.0).ToList();
Когда я смотрю журнал поиска Sitecore, запрос Lucene, на который это переведено, был - proprice:[4 TO 4]
. И если я выполню этот запрос непосредственно по индексу в Люке, он вернет данные. Я пробовал это с другими условиями, такими как p.Price >= 1.0
, но ничего не сработало. Что интересно, когда я удаляю условие и получаю все записи, свойство Price в сущности Product заполняется правильным двойным значением (4.0).
Но если я немного изменю запрос следующим образом, он вернет правильные данные:
var products = context.GetQueryable<Product>().Where(p => p["proprice"] == "4").ToList();
Таким образом, похоже, что когда условие против числовых значений, оно не работает. И, к сожалению, мне нужно фильтровать на основе числового диапазона, и, следовательно, описанный выше подход мне не подойдет. Я могу отказаться от ContentSearch API и напрямую выполнить запрос Lucene с помощью провайдера Lucene, но в будущем я не смогу переключиться на другой провайдер поиска, например Solr. Или, альтернативно, я могу получить все данные, а затем отфильтровать свой код - хотя я бы этого не предпочел.
Я был бы признателен за любую помощь в решении этого. PS: Еще несколько моментов: 1) Я попробовал тип поля «ProPrice» в шаблоне данных как однострочный текст, целое, двойное — ничего не сработало 2) Я использую анализатор Lucene по умолчанию — Lucene.Net.Analysis.Standard.StandardAnalyzer