Ogólnie rzecz biorąc, każdy analizator w Lucene to tokenizer + stemmer + filtr słów zatrzymujących.
Tokenizer dzieli twój tekst na fragmenty, a ponieważ różne analizatory mogą używać różnych tokenizatorów, możesz uzyskać różne strumienie tokenów wyjściowych , tj. Sekwencje fragmentów tekstu. Na przykład, KeywordAnalyzer
wspomniałeś, w ogóle nie dzieli tekstu i przyjmuje całe pole jako pojedynczy token. Jednocześnie StandardAnalyzer
(i większość innych analizatorów) używa spacji i znaków interpunkcyjnych jako punktów podziału. Na przykład dla frazy „Jestem bardzo szczęśliwy” wyświetli listę [„i”, „jestem”, „bardzo”, „szczęśliwy”] (lub coś w tym rodzaju). Więcej informacji na temat konkretnych analizatorów / tokenizatorów można znaleźć w dokumentacji Java .
Stemmery są używane do uzyskania podstawy danego słowa. W dużej mierze zależy to od używanego języka. Na przykład, dla poprzedniego wyrażenia w języku angielskim będzie coś takiego jak ["i", "be", "veri", "happi"], a dla francuskiego "Je suis très heureux" jakiś francuski analizator (np. SnowballAnalyzer
Zainicjowany z „francuskim”) wygeneruje [„je”, „être”, „tre”, „heur”]. Oczywiście, jeśli użyjesz analizatora jednego języka do wyodrębnienia tekstu w innym, zostaną użyte reguły z innego języka, a stemmer może dać niepoprawne wyniki. Nie jest to błąd całego systemu, ale wyniki wyszukiwania mogą być wtedy mniej dokładne.
KeywordAnalyzer
nie używa żadnych stempli, przechodzi przez całe pole bez modyfikacji. Tak więc, jeśli masz zamiar wyszukać jakieś słowa w tekście angielskim, nie jest dobrym pomysłem używanie tego analizatora.
Słowa „stop” to najczęściej występujące i prawie bezużyteczne słowa. Ponownie, w dużym stopniu zależy to od języka. W przypadku języka angielskiego te słowa to „a”, „the”, „I”, „be”, „have” itd. Filtry słów pomijanych usuwają je ze strumienia tokenów, aby zmniejszyć szum w wynikach wyszukiwania, więc ostatecznie nasza fraza „I StandardAnalyzer
Jestem bardzo zadowolony "z zostanie przekształcony w listę [" veri "," happi "].
I KeywordAnalyzer
znowu nic nie robi. Tak więc KeywordAnalyzer
jest używany do takich rzeczy, jak identyfikator lub numery telefonów, ale nie w przypadku zwykłego tekstu.
A jeśli chodzi o twój maxClauseCount
wyjątek, myślę, że dostaniesz to, szukając. W tym przypadku najprawdopodobniej jest to spowodowane zbyt złożonym zapytaniem. Spróbuj podzielić to na kilka zapytań lub użyj więcej funkcji niskiego poziomu.
Z mojej perspektywy użyłem
StandAnalyzer
iSmartCNAnalyzer
. Ponieważ muszę wyszukiwać tekst po chińsku. OczywiścieSmartCnAnalyzer
lepiej radzi sobie z chińskim. Do innych celów musisz wybrać odpowiedni analizator.źródło