Ответ 1
"Безопаснее ли использовать UNLIMITED". да. этот параметр не имеет ничего общего с уже созданными документами.
Если у вас есть строковые поля, вы не можете использовать числовой диапазон. Вы можете проверить это самостоятельно.
У меня есть существующая часть программного обеспечения, использующая Lucene 2.2.x, и мне нужно обновить до 3.1. Чтобы сделать это обновление, я прочитал документацию, предлагающую сначала перейти на 2.9.x, удалив все предупреждения об устаревании, а затем обновить до 3.1.x. У меня есть существующие индексы, которые мне нужны, чтобы поддерживать совместимость с кодом.
Мой главный вопрос касается обработки дат. В 2.2.x мне пришлось использовать DateTools.dateToString() для преобразования Date.getTime() в строку, которую я мог бы индексировать и хранить. Я создал два поля для каждого документа. Один для поиска, который хранился с разрешением Hour, и другое поле, которое не анализировалось. Теперь Lucene 2.9.x поддерживает разные типы данных, чем строка. Могут ли эти новые типы использоваться в RangeQueries, если они против предыдущей версии, которая использовала DateTools для преобразования дат в строки? Вот код, который я тоже изменил:
До:
return new RangeFilter("dateArchived-stored",
DateTools.dateToString(start, DateTools.Resolution.MILLISECOND),
DateTools.dateToString(end, DateTools.Resolution.MILLISECOND),
false, true );
После:
return NumericRangeFilter.newLongRange("dateArchived-stored",
start.getTime(),
end.getTime(), true, true );
Теперь, когда Lucene поддерживает нестрочные типы данных, нам нужно иметь дело с разрешением дат, как это было сделано с запросами Term?
IndexWriter требует объявления MaxFieldLimit. Предыдущие версии этого не сделали. Использует UNLIMITED такое же поведение, как в предыдущих версиях? Безопаснее ли использовать UNLIMITED, учитывая, что есть индексы, которые я буду читать, которые были созданы с помощью 2.2?
До:
new IndexWriter( indexDirectory, analyzer )
После:
new IndexWriter( FSDirectory.open(indexDirectory), analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED )
Для сортировки объектов требуется объявление SortField, для которого требуется тип этого поля. Для существующих полей, индексированных версиями 2.2.x, мы можем объявлять поля, ранее индексированные как String, другому типу или всегда должны быть SortField.STRING?
До:
new Sort("timestamp", false )
После:
new Sort(new SortField("timestamp", SortField.LONG, false) )
Будет ли это работать с индексами, построенными в 2.2.x, но прочитанными 2.9.x?
Наконец, у меня возникнут проблемы с переходом на 3.1.x с индексами, встроенными в 2.2.x? Я перехожу к 2.9.x в свою локальную систему dev, но в поле он будет идти от 2.2.x прямо до 3.1.x. Должен ли я опубликовать версию с использованием 2.9.x?
"Безопаснее ли использовать UNLIMITED". да. этот параметр не имеет ничего общего с уже созданными документами.
Если у вас есть строковые поля, вы не можете использовать числовой диапазон. Вы можете проверить это самостоятельно.