Podczas indeksowania Lucene dzieli tekst na jednostki atomowe (tokeny). Podczas tej fazy może się zdarzyć wiele rzeczy (na przykład obniżenie poziomu, powstrzymanie, usunięcie słów kluczowych itp.). Wynik końcowy to termin.
Następnie, po zapytaniu, Lucene stosuje dokładnie ten sam algorytm do zapytania, aby mógł dopasować termin do terminu.
P: Dlaczego TermQuery
nie wymaga analizatora?
A: QueryParser
obiekt analizuje ciąg zapytania i generuje TermQuery
(może również generować inne typy zapytań, np. PhraseQuery
). TermQuery
zawiera już warunki w tym samym kształcie, co w indeksie. Jeśli (jako programista) jesteś absolutnie pewien, co robisz, możesz samemu stworzyć numer TermQuery
- ale to zakłada, że znasz dokładną sekwencję analizowania zapytań i wiesz, jak terminy wyglądają w indeksie.
P: Dlaczego BooleanQuery
nie wymaga analizatora?
A: BooleanQuery
po prostu dołącza do innych zapytań za pomocą operatorów (AND/OR/MUST/SHOULD, itp.). Sam nie jest użyteczny bez żadnych innych pytań.
To jest uproszczona odpowiedź na pytanie: bardzo. Bardzo polecam lekturę książki Introduction to Information Retrieval; zawiera teorię, na podstawie której napisano Lucene (i inne podobne ramy). Ta książka jest dostępna online za darmo.
Dzięki, ale nie wyjaśnia, dlaczego określenie analizatora jest wymagane tylko podczas analizowania łańcucha w celu wysłania kwerendy, a nie zawsze przy kwerendach. – haim770
Zmieniono moją odpowiedź, daj mi znać, jeśli nie jest to wystarczająco jasne lub brakuje czegoś. – mindas