elasticsearch : analyseur pour faire correspondre tous les TEXT indépendamment des symboles non alpha
J'ai du mal à trouver la bonne combinaison d'analyseurs pour un champ de texte. J'ai besoin que tous les mots correspondent et soient présents (bien qu'il serait bien d'ignorer les mots vides) quelle que soit la ponctuation.
Par exemple : "un joli chien nommé bart" et "un joli chien, nommé bart" doivent tous deux renvoyer le document, mais pas "un joli chien".
J'ai pensé à enregistrer les deux (ou plusieurs) phrases dans le champ et à utiliser field.keyword, mais il pourrait y avoir quelques permutations de symboles et je ne pense pas que ce soit le moyen le plus intelligent.
Je sais que vous ne pouvez pas ajouter d'analyseur au type de données "mot clé" - y a-t-il une autre configuration qui aurait plus de sens ?
actuellement je l'ai mis en place avec
'custom_char_filter' => [
'type' => "mapping",
'mappings' => [
". => ",
", => "
]
]
'custom_analyzer' => [
'type' => 'standard',
'stopwords' => '_english_',
'char_filter' => [
'custom_char_filter'
],
],
Solution du problème
J'ai pu le réaliser avec un normalisateur sur un type de mot-clé
Le normalisateur:
'normalizer' => [
'custom_normalizer' => [
'type' => 'custom',
'char_filter' => 'custom_char_filter',
'filter' => ['lowercase'],
]
]
Le filtre char :
'char_filter' => [
'custom_char_filter' => [
'type' => "mapping",
'mappings' => [
". => ",
", => ", //remove, and.
"- =>\\u0020", //replace dash with empty space
]
]
],
Cartographie de mon champ :
'my_field' => [
'type' => 'keyword',
'normalizer' => 'custom_normalizer'
],
Maintenant, "un joli chien nommé Bart" et "un joli chien, nommé Bart" fonctionnent tous les deux et "un joli chien" ne fonctionne pas.
Commentaires
Enregistrer un commentaire