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