Analyseurs en elasticsearch
j'ai du mal à comprendre le concept d'analyseurs dans elasticsearch avec GEM pneu. En fait, je suis un débutant pour ces concepts de recherche. Quelqu'un peut-il m'aider à rédiger un article de référence ou m'expliquer ce que font réellement les analyseurs et pourquoi ils sont utilisés?
je vois différents analyseurs être mentionnés à elasticsearch comme mot clé, standard, simple, boule de neige. Sans la connaissance des analyseurs Je ne pouvais pas faire ce qui correspond réellement à mon besoin.
3 réponses
Laissez-moi vous donner une brève réponse.
un analyseur est utilisé au moment de l'indice et au moment de la recherche. Il est utilisé pour créer un index des termes.
pour indexer une phrase, il pourrait être utile de la briser en mots. Voici l'analyseur.
il applique des tokenizers et des filtres de token. Un tokenizer pourrait être un tokenizer à espace blanc. Diviser une phrase en jetons à chaque espace. Un tokenizer de minuscules séparera une phrase à chaque non-lettre et toutes les lettres en minuscules.
un filtre à jetons est utilisé pour filtrer ou convertir certains jetons. Par exemple, un filtre ASCII convertira des caractères comme ê, é, è en E.
Un analyseur est un mélange de tout cela.
vous devriez lire Guide D'analyse et examiner la bonne toutes les différentes options que vous avez.
par défaut, Elasticsearch applique l'analyseur standard. Il va supprimer toutes les commun des mots anglais (et de nombreux autres filtres)
vous pouvez également utiliser le analyser Api pour comprendre comment cela fonctionne. Très utile.
Dans Lucene , anayzer est une combinaison de générateur de jetons (splitter) + stemmer + ignoré filtre
dans ElasticSearch , l'analyseur est une combinaison de
- filtre de caractères : "Rangy up" une chaîne avant qu'elle ne soit tokenize. Exemple: supprimer les balises html
- Tokenizer : DOIT avoir un seul générateur de jetons. Il est utilisé pour rompre la chaîne en termes individuels ou des jetons
- Token filter : modifier, ajouter ou supprimer des tokens. Stemmer est un filtre à jeton, il est utilisé pour obtenir la base de mot, par exemple: "happy", "happiness" = > "happi" ( Snowball demo )
j'utilise cet analyseur dans mon cas:
{
"settings":{
"index" : {
"analysis" : {
"analyzer" : {
"analyzerWithSnowball" : {
"tokenizer" : "standard",
"filter" : ["standard", "lowercase", "englishSnowball"]
}
},
"filter" : {
"englishSnowball" : {
"type" : "snowball",
"language" : "english"
}
}
}
}
}
}
Réf:
voici un super plugin sur GitHub repo . C'est un peu une extension de analyser API . Trouvé sur le plugin élastique officiel liste .
Ce qui est génial, c'est qu'il montre des jetons avec tous leurs attributs après chaque étape. Avec cela, il est facile de déboguer la configuration de l'analyseur et de voir pourquoi nous avons obtenu de tels jetons et où nous avons perdu ceux que nous voulions.
si seulement je l'avais trouvé plus tôt aujourd'hui. Grâce à cela, je viens de découvrir pourquoi mon tokenizer keyword_repeat
token semblait ne pas fonctionner correctement. Le problème a été causé par le filtre de token suivant: icu_transform
(utilisé pour la translitération) qui, malheureusement, n'a pas respecté l'attribut de mot-clé et a transformé tous les tokens. Je ne sais pas comment trouver la cause sinon pour ce plugin.