In generale, qualsiasi analizzatore in Lucene è tokenizer + stemmer + filtro stop-words.
Tokenizer divide il testo in blocchi e poiché diversi analizzatori possono utilizzare tokenizzatori diversi, è possibile ottenere flussi di token di output diversi , ovvero sequenze di blocchi di testo. Ad esempio, KeywordAnalyzer
hai citato non divide affatto il testo e prende tutto il campo come un singolo token. Allo stesso tempo, StandardAnalyzer
(e la maggior parte degli altri analizzatori) usa spazi e punteggiatura come punti di divisione. Ad esempio, per la frase "Sono molto felice" produrrà elenco ["i", "sono", "molto", "felice"] (o qualcosa del genere). Per ulteriori informazioni su analizzatori / tokenizzatori specifici, consultare i relativi documenti Java .
Gli stemmer sono usati per ottenere la base di una parola in questione. Dipende molto dalla lingua utilizzata. Ad esempio, per la frase precedente in inglese ci sarà qualcosa come ["i", "be", "veri", "happi"] e per il francese "Je suis très heureux" una sorta di analizzatore francese (come SnowballAnalyzer
, inizializzato con "French") produrrà ["je", "être", "tre", "heur"]. Ovviamente, se utilizzerai l'analizzatore di una lingua per stemperare il testo in un'altra, verranno utilizzate le regole dell'altra lingua e lo stemmer potrebbe produrre risultati errati. Non è un errore di tutto il sistema, ma i risultati della ricerca potrebbero essere meno accurati.
KeywordAnalyzer
non utilizza stemmers, supera tutto il campo senza modifiche. Quindi, se hai intenzione di cercare alcune parole nel testo inglese, non è una buona idea usare questo analizzatore.
Le stop words sono le parole più frequenti e quasi inutili. Di nuovo, dipende molto dalla lingua. Per l'inglese queste parole sono "a", "the", "I", "be", "have", ecc. I filtri di parole non significative le rimuovono dal flusso di token per ridurre il rumore nei risultati di ricerca, quindi finalmente la nostra frase "I sono molto contento "con StandardAnalyzer
verrà trasformato in list [" veri "," happi "].
E KeywordAnalyzer
ancora non fa nulla. Quindi, KeywordAnalyzer
viene utilizzato per cose come ID o numeri di telefono, ma non per il testo normale.
E per quanto riguarda la tua maxClauseCount
eccezione, credo che tu lo ottenga durante la ricerca. In questo caso molto probabilmente è a causa di una query di ricerca troppo complessa. Prova a suddividerlo in più query o utilizza più funzioni di basso livello.