Вы можете сделать это, используя Range Query.В частности, вы можете сделать это, используя NumericRangeQuery
.Для этого начните с индексации дат с помощью NumericField и добавления их в свой документ, например:
var df = new NumericField(Fields.AmendedDate);
df.SetIntValue(int.Parse(itemToIndex.startDate.ToString("yyyyMMdd")));
doc.Add(df);
Вы можете немного ускорить индексацию, повторно используя NumericField во многих документах см. Документацию .С вашими датами все хорошо проиндексировано, теперь вы готовы искать по нему.Для этого мы используем NumericRangeQuery:
var q = NumericRangeQuery.NewIntRange( Fields.AmendedDate,
int.Parse(SearchFrom.ToString("yyyyMMdd")),
int.Parse(SearchTo.ToString("yyyyMMdd")),
true, true);
Этот запрос затем можно использовать для поиска или присоединения к существующему запросу, например:
masterQuery.Add(q, BooleanClause.Occur.MUST);
Разделение поиска таким способомгораздо более быстрое предложение, чем использование поиска по тексту, из-за характера индексации числовых полей.Кроме того, ваше разрешение (в данном случае на дневной уровень) может быть изменено, чтобы обеспечить лучший разброс по вашим данным (т. Е. Если вам нужны часы, минуты или секунды, то добавьте их в строку от наиболее значимых до наименее значимых).И наконец, при использовании запроса вы игнорируете этап фильтрации вашего поиска (это обычный запрос, а не фильтр).