Używamy Lucene do opracowania pola wyszukiwania dla danych dostarczanych użytkownikowi, tak jak w przypadku skrzynki pocztowej. Chcielibyśmy pozwolić, aby ramka obsługiwała daty, na przykład 5/1/2011. Żeby było łatwiej, jesteśmy ograniczając aktualną wersję funkcji do zaledwie dwóch formatów daty:Jak wykryć datę w kwerendzie wyszukiwania wolnego tekstu Lucene?
mm/dd/yy
mm/dd/yyyy
Dla naszego prototypu my posiekany proces analizy zapytań do próby wstępne przetworzenie ciąg kwerendy szukać tych dwóch wzory dat. Było to około 2 lata temu i byliśmy na Lucene 2.4. Jestem ciekaw, czy są jakieś narzędzia w Lucene, gotowe do zaakceptowania DateFormat i zwrócenia TokenStream z dowolnymi ustalonymi datami. Przeglądając Javadocs dla Lucene 2.9, znalazłem klasę:
org.apache.lucene.analysis.sinks.DateRecognizerSinkFilter
który wydaje się robić to, co muszę, ale implementuje SinkFilter, koncepcji, które nie wydają się być udokumentowane w Lucene Wiki. Czy ktokolwiek użył tego filtra przed, a jeśli tak, jaki jest najskuteczniejszy sposób jego użycia?
Dzięki za odpowiedź! Przedstawię twoje rozwiązanie i opublikuję wyniki. –
Świetnie! Możesz również zaimplementować to jako zwykły tokenizer in-line, który emituje oryginalny ciąg i datę w tej samej pozycji. W ten sposób, jeśli na przykład Twój format daty zawiera nazwy miesięcy lub dat, możesz nadal wyszukiwać je bezpośrednio. –