2009-10-29 9 views
11

Czy można wyszukiwać w zakresach dat za pomocą Lucene w Javie? Jak budować zapytania wyszukiwania Lucene na podstawie pól dat i zakresów dat? Na przykład:Wyszukiwanie zakresów dat za pomocą Lucene w Javie?

  • pomiędzy określonymi datami
  • przed określoną datą
  • po określonej dacie
  • w ciągu ostatnich 24 godzin
  • w ciągu ostatniego tygodnia
  • w ciągu ostatniego miesiąca.

[Edytuj] Używam Lucene 2.4.1 i mój system jest naprawdę dziedzictwo i bardzo słabo przetestowany więc chciałbym jeśli to możliwe, aby nie trzeba uaktualnić

+1

Tak, jest to możliwe. Jeśli potrzebujesz przykładowego kodu, znajdę dla ciebie trochę - po prostu zapytaj w komentarzu do tego postu. Zobacz Lucene w akcji - możesz znaleźć odpowiedź na to pytanie i wiele innych. –

Odpowiedz

18

Lucene (przed wersją 2.9 tak) tylko przechowuje wartości łańcuchów i obsługuje tylko kwerendy leksykograficzne na tych danych. Więc jeśli chcesz przechowywać dane na temat daty/czasu i kwerendy zakresu, musisz jawnie sformatować wartości danych/czasu w taki sposób, aby były uporządkowane leksykograficznie.

Na przykład, przechowywać datę/czas jako coś podobnego 2009-10-29T15:34:00, a następnie wykonaj zapytania zakres jak [2009-10-29T15:00:00 TO 2009-10-29T16:00:00]

Jak zostało wskazane w innym miejscu, Lucene 2.9 końcu wprowadzonego wsparcia dla zapytań zasięgu przeciwko danych non-strunowych, czyniąc to wszystko raczej łatwiejsze.

+7

Użycie metody 'DateTools.dateToString (date, Resolution.SECOND)' może pomóc w stworzeniu łańcucha daty w formie luceńskiej, która przypomina '20110223220000', co oznacza' 2011-02-23 22: 00: 00'. – bekce

Powiązane problemy