Quelqu'un peut-il s’il vous plaît expliquer la différence entre les différents analyseurs au Lucene ? J’obtiens une exception maxClauseCount et je comprends que je peux éviter cela en utilisant un KeywordAnalyzer mais je ne veux pas changer de la StandardAnalyzer sans comprendre les questions entourant les analyseurs. Merci beaucoup.
Réponse
Trop de publicités?En général, un analyseur de Lucene est générateur de jetons + stemmer + stop-words filtre.
Générateur de jetons scinde le texte en morceaux, et depuis différents analyseurs peuvent utiliser différents des générateurs de jetons, vous pouvez obtenir différentes de sortie jeton de flux, c'est à dire des séquences de segments de texte. Par exemple, KeywordAnalyzer vous avez mentionné ne pas couper le texte à tous et prend tout le champ comme un seul jeton. Dans le même temps, StandardAnalyzer (et la plupart des autres analyseurs) utilisation des espaces et de la ponctuation en tant que points de scission. Par exemple, pour la phrase "je suis très heureux" il va produire de la liste ["je", "suis", "très", "heureux"] (ou quelque chose comme ça). Pour plus d'information sur les analyseurs ou des générateurs de jetons 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 la phrase précédente 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 le "français") produira ["je", "être", "trois", "heur"]. Bien sûr, si vous utilisez l'analyseur de la langue de la tige de texte dans un autre, les règles de l'autre langue sera utilisée et stemmer peut produire des résultats incorrects. Ce n'est pas l'échec de tout le système, mais les résultats de la recherche peut alors être moins précis.
KeywordAnalyzer ne pas utiliser de conjugaison, il passe tous les champs modifiés. Donc, si vous allez à la recherche des mots dans le texte anglais, ce n'est pas une bonne idée d'utiliser cet analyseur.
Les mots vides sont les plus fréquentes et presque inutile mots. Encore une fois, il dépend fortement de la langue. Pour l'anglais, ces mots sont "un", "la", "I", "être", "avoir", etc. Stop-words filtres de les supprimer à partir du jeton de 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 à nouveau ne rien faire. Donc, KeywordAnalyzer est utilisé pour des choses comme ID ou des numéros de téléphone, mais pas pour habitude de texte.
Et comme pour votre maxClauseCount exception, je crois que vous obtenir il sur la recherche. Dans ce cas, le plus probablement, c'est parce que trop complexe requête de recherche. Essayez de fractionner à plusieurs requêtes ou de l'utilisation de plus bas niveau des fonctions.