2016-03-02 3 views
0

Простой и прямой вопрос: Можно ли сортировать результаты поиска в соответствии с их последовательностью/датой создания? Добавление поля даты и сортировка по нему были бы опцией. Однако индекс уже существует и содержит огромный набор документов, которые я хотел бы отсортировать (некоторые).Можно ли сортировать результаты поиска Lucene по последовательности/дате создания?

+0

AFAIK Lucene не сохраняет дату создания в индексе. Но не являются ли порядковые номера документов? (Я только что проверил, и они [не обязательно] (https://lucene.apache.org/core/3_0_3/fileformats.html#Document%20Numbers)) – biziclop

+0

Не знал об этом факте. Итак, можем ли мы предположить, что набор результатов по умолчанию упорядочен по знаку doc id? –

+0

Ах, как я понимаю, эти идентификаторы не уникальны, особенно при использовании в нескольких индексах. Но, скорее всего, обеспечить последовательную последовательность создания. Я собираюсь копать немного больше. –

ответ

2

Do не использовать docID для чего угодно (кроме получения документа после запроса). Это не последовательный и не обязательно будет стабильным, если вы делаете обновления (что фактически удаляет, а затем добавлять).

Просто добавьте поле, которое представляет дату и сортируется по этому запросу.

Сделайте это числовым полем и отформатируйте число, подобное yyyyMMddhhmmss. Если вам требуется меньше точности, просто отбросьте цифры справа. Или, если вам нужна более высокая точность, просто сохраните значение тиков.

Удлинительные приборы FTW!

public static long AsYMDHMS(this DateTime date) 
    { 
     return 
      (date.Year * 10000000000) + 
      (date.Month * 100000000) + 
      (date.Day * 1000000) + 
      (date.Hour * 10000) + 
      (date.Minute * 100) + 
      date.Second; 
    }