En général, tout analyseur dans Lucene est un filtre tokenizer + stemmer + stop-words.
Tokenizer divise votre texte en morceaux, et comme différents analyseurs peuvent utiliser différents tokenizers, vous pouvez obtenir différents flux de jetons de sortie , c'est-à-dire des séquences de morceaux de texte. Par exemple, KeywordAnalyzer
vous avez mentionné qu'il ne divise pas du tout le texte et prend tout le champ comme un seul jeton. En même temps, StandardAnalyzer
(et la plupart des autres analyseurs) utilisent les espaces et la ponctuation comme points de partage. Par exemple, pour la phrase «je suis très heureux», il produira une liste [«i», «suis», «très», «heureux»] (ou quelque chose comme ça). Pour plus d'informations sur des analyseurs / tokenizers spécifiques, consultez sa documentation Java .
Les tiges sont utilisées pour obtenir la base d'un mot en question. Cela dépend fortement de la langue utilisée. Par exemple, pour la phrase précédente en anglais, il y aura quelque chose comme ["i", "be", "veri", "happi"] produit, et pour le français "Je suis très heureux" une sorte d'analyseur de français (comme SnowballAnalyzer
, initialisé avec "French") produira ["je", "être", "tre", "heur"]. Bien sûr, si vous utilisez un analyseur d'une langue pour extraire du texte dans une autre, les règles de l'autre langue seront utilisées et le stemmer peut produire des résultats incorrects. Ce n'est pas un échec de tout le système, mais les résultats de la recherche peuvent alors être moins précis.
KeywordAnalyzer
n'utilise pas de stemmers, il passe tout le champ sans modification. Donc, si vous voulez rechercher des mots dans du texte anglais, ce n'est pas une bonne idée d'utiliser cet analyseur.
Les mots vides sont les mots les plus fréquents et presque inutiles. Encore une fois, cela dépend fortement de la langue. Pour l'anglais, ces mots sont "a", "the", "I", "be", "have", etc. Les filtres de mots vides les suppriment du flux de jetons pour réduire le bruit dans les résultats de recherche, donc finalement notre phrase "I 'suis très content "avec StandardAnalyzer
sera transformé en liste [" veri "," happi "].
Et KeywordAnalyzer
encore une fois ne fait rien. Donc, KeywordAnalyzer
est utilisé pour des choses comme les identifiants ou les numéros de téléphone, mais pas pour le texte habituel.
Et quant à votre maxClauseCount
exception, je crois que vous l'obtenez en cherchant. Dans ce cas, c'est probablement à cause d'une requête de recherche trop complexe. Essayez de le diviser en plusieurs requêtes ou d'utiliser plus de fonctions de bas niveau.