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é.