Comparaison des analyseurs de Lucene
quelqu'un peut-il expliquer la différence entre les différents analyseurs de Lucene? Je reçois une exception maxClauseCount et je comprends que je peux éviter cela en utilisant un analyseur Keyword mais je ne veux pas changer de L'Analyseur standard sans comprendre les questions entourant les analyseurs. Merci beaucoup.
2 réponses
en général, tout analyseur de Lucene est tokenizer + stemmer + stop-words filter.
     Tokenizer    divise votre texte en morceaux, et puisque différents analyseurs peuvent utiliser différents tokenizers, vous pouvez obtenir une sortie différente    token streams   , c.-à-d. séquences de morceaux de texte. Par exemple,  KeywordAnalyzer  que vous avez mentionné    ne divise pas du tout le texte    et prend tout le champ comme un seul token. Dans le même temps,  StandardAnalyzer  (et la plupart des autres analyseurs) utilisent les espaces et la ponctuation comme points de séparation. Par exemple, pour l'expression "je suis très heureux" il produira la liste ["je", "suis", "très", "heureux"] (ou quelque chose comme ça). Pour plus d'informations sur les analyseurs/tokenizers spécifiques voir son    Java Docs    .   
     Conjugaison    sont utilisées pour obtenir la base d'un mot en question. Il dépend fortement de la langue utilisée. Par exemple, pour précédente phrase en anglais, il y aura quelque chose comme ["je", "être", "veri", "happi"] produit, et pour le français "Je suis très heureux" une sorte de français de l'analyseur (comme     SnowballAnalyzer     , initialisé avec "français") produira ["je", "être", "trois", "heur"]. Bien sûr, si vous utilisez un analyseur d'une langue pour obtenir du texte dans une autre, les règles de l'autre langue seront utilisées et stemmer peut produire des résultats incorrects. Ce n'est pas un échec de tout le système, mais des résultats de recherche alors peut être moins précise.    
  KeywordAnalyzer  n'utilise aucun Stemmer, il passe tout le champ sans avoir été modifié. Donc, si vous cherchez des mots dans le texte anglais, ce n'est pas une bonne idée d'utiliser cet analyseur.   
     les mots D'arrêt    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 "un", "la", "I", "être", "avoir", etc. Filtres Stop-words les supprimer du token flux pour réduire le bruit dans les résultats de recherche, de sorte que, finalement, notre expression "je suis très heureux" de  StandardAnalyzer  sera transformé à la liste ["veri", "happi"].    
 et KeywordAnalyzer  encore une fois ne fait rien. Ainsi,  KeywordAnalyzer  est utilisé pour des choses comme les numéros D'identification ou de téléphone, mais pas pour le texte habituel.   
 et en ce qui concerne votre exception maxClauseCount , je crois que vous l'obtenez sur la recherche. Dans ce cas, il est très probablement en raison de requête de recherche trop complexe. Essayez de diviser pour plusieurs requêtes ou utiliser des fonctions de niveau plus bas.   
  De mon point de vue, j'ai utilisé  StandAnalyzer  et  SmartCNAnalyzer  . Comme je dois chercher du texte en chinois. De toute évidence,  SmartCnAnalyzer est meilleur en chinois. Pour des buts diiférents, vous devez choisir l'analyseur le plus approprié.