При попытке сортировать числовые поля datetime (long), я всегда получаю исключение FormatException.Lucene - Sorting Date as NumericField
When converting a string to DateTime, parse the string to take the date before putting each variable into the DateTime object.
Добавление числового поля: сортировка
doc.Add(new NumericField("creationDate", Field.Store.YES, true)
.SetLongValue(DateTime.UtcNow.Ticks);
Добавить:
// boolean query
var sortField = new SortField("creationDate", SortField.LONG, true);
var inverseSort = new Sort(sortField);
var results = searcher.Search(query, null, 100, inverseSort); // exception thrown here
Проверка индекса, я могу проверить, что поле 'CreationDate' хранит "длинные" значения. Что может вызвать это исключение?
EDIT:
Запрос
var query = new BooleanQuery();
foreach (var termQuery in incomingProps.Select(p => new TermQuery(new Term(kvp.Key, kvp.Value.ToLowerInvariant()))
{
query.Add(new BooleanClause(termQuery , Occur.Must));
}
return query;
Версия: 3.0.3 Lucene.Net
UPDATE:
Эта проблема происходит снова, теперь со значениями INT. Я загрузил исходный код Lucene.Net и отладил проблему.
Так что это где-то в FieldCache при попытке проанализировать значение «` \ b \ 0 \ 0 \ 0 »на Integer, что кажется немного странным.
Я добавляю эти значения числовых полей:
doc.Add(new NumericField(VersionNum, int.MaxValue, Field.Store.YES,
true).SetIntValue(VersionValue));
я получаю исключение, когда я должен получить по крайней мере один удар обратно. После проверки индекса я вижу, что термин поле является следующим:
И текстовое поле:
EDIT:
Я жёстко int и добавлено несколько сегментов:
doc.Add(new Field(VersionNum, NumericUtils.IntToPrefixCoded(1), Field.Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS));
Что привело на хранение поле версии, как:
И еще, когда я пытаюсь разобраться, я получаю ошибку синтаксического анализа:
var sortVersion = new SortField(VersionNum, SortField.INT, true);
Для каждого исключения, Lucene пытается разобрать "\ b \ 0 \ 0 \ 0 ". Глядя на префикс, закодированный в виде строки, 1 переведет на «\ b \ 0 \ 0 \ 0 \ 1», я предполагаю?
Возможно ли, что Lucene оставляет мусор в FieldCache?
Вы можете показать, как создается «запрос»? – AndyPook
@ AndyPook Только что отредактировал вопрос и добавил «запрос». Он отлично работает, если я сортирую DOC. –
Поле даты не включено в запрос, оно используется только для сортировки. Допустим, что я запрашиваю только пользовательский идентификатор поля, который предоставляется для возврата набора результатов. –