ElasticSearch : Custom Analyzer


(Maxime R.) #1

Bonjour,

J'utilise Elasticsearch 1.6.0, et je m'intéresse aux custom analyzer.
Je pense avoir bien indexé mes settings avec mon analyzer, mais lorsque j'essaie d'inserer un mapping qui utilise cet analyzer, il me renvoie "Analyzer [my_analyzer] not found for field [...]".

Voici comment j'index mon analyzer :

PUT localhost:9200/foo2/
{
  "index" : {
    "analysis" : {
      "analyzer" : {
        "my_analyzer" : {
          "type" : "custom",
          "tokenizer" : "my_tokenizer",
          "filter" : ["my_tokenfilter"]
        }
      },
      "tokenizer" : {
        "my_tokenizer" : {
          "type" : "pattern",
          "max_token_length" : 100
        }
      },
      "filter" : {
        "my_tokenfilter" : {
          "type" : "pattern_capture",
          "preserve_orignial" : 1,
          "patterns" : [""]
        }
      }
    }
  }
}

Dites moi si j'ai fais une erreur.
Merci beaucoup !

Maxime


(David Pilato) #2

Quelle requêtes fais-tu pour définir l'analyseur ?


(Maxime R.) #3

Celle que j'ai indiqué dans le premier message, c'est ma requête pour le créer, mais je ne sais pas si elle est exacte ou non.
J'ai vu sur beaucoup de forum qu'il faut mettre "settings" au dessus de "analysis", et sur d'autre forum qu'il faut mettre "index" au dessus de "analysis", donc je suis un peu perdu, et je ne sais pas quel est la bonne solution.


(David Pilato) #4

Je renouvèle ma question. "Quelle commande HTTP exacte passes-tu à elasticsearch?"
Quel est le script qui permet de reproduire ton problème ?

Je t'invite à lire cet article: A propos de la catégorie "Discussions en français"


(Maxime R.) #5

Je n'utilise pas les scripts, mais je vais essayer de le reproduire. J'utilise une application java pour faire mes requètes.
Mon problème survient au moment où j'essaie de créer un nouveau type, avec un mapping que j'ai spécifié.

POST localhost:9200/foo2/_mapping/instanceDescription
{
  "foo2" : {
    "properties": {
      "descriptionCode": {
        "type": "string",
        "index" : "analyzed",
        "analyzer" : "my_analyzer"
      }
    }
  }
}

Je n'ai pas précisé les autres champs, ce sont de simples champs sans interets.


(Maxime R.) #6

Bonjour,

Mon problème est toujours là. Je vous le rappelle.
J'ai créé mon propre analyzer (voire le premier post). Et lorsque j'essaie d'insérer mon mapping qui utilise mon analyzer. Je me retrouve avec une erreur de type :

Analyzer [my_analyzer] not found for field [descriptionCode].

Mes recherches sur google ne me mène nulle part. Je ne vois toujours pas ou le soucis se trouve, j'ai vérifié et re-vérifié les noms, la syntaxe, mais rien n'y fais.
Merci de votre aide.


(David Pilato) #7

Je te rappelle aussi ma réponse:

Quel est le script qui permet de reproduire ton problème ?

A moins que quelqu'un d'autre n'ait du temps et l'envie de créer lui-même un script pour reproduire ton problème?


(Maxime R.) #8

Ceci n'est pas une script ?

PUT localhost:9200/foo2/
{
  "index" : {
    "analysis" : {
      "analyzer" : {
        "my_analyzer" : {
          "type" : "custom",
          "tokenizer" : "my_tokenizer",
          "filter" : ["my_tokenfilter"]
        }
      },
      "tokenizer" : {
        "my_tokenizer" : {
          "type" : "pattern",
          "max_token_length" : 100
        }
      },
      "filter" : {
        "my_tokenfilter" : {
          "type" : "pattern_capture",
          "preserve_orignial" : 1,
          "patterns" : [""]
        }
      }
    }
  }
}

POST localhost:9200/foo2/_mapping/instanceDescription
{
  "instanceDescription" : {
    "properties": {
      "descriptionCode": {
        "type": "string",
        "index" : "analyzed",
        "analyzer" : "my_analyzer"
      }
    }
  }
}

(Christophe Boucaut) #9

Voici la documentation : https://www.elastic.co/guide/en/elasticsearch/guide/current/custom-analyzers.html#_creating_a_custom_analyzer

il faut utiliser settings de toute évidence. Tu peux vérifier sa présence ensuite avec: http://localhost:9200/foo2/_settings?pretty dans un navigateur et avoir:

{
  "foo2" : {
    "settings" : {
      "index" : {
        [...]
        "analysis" : {
          "analyzer" : {
            "my_analyzer" : {
              "type" : "custom",
              "filter" : [...],
              "tokenizer" : "[...]"
            }
          }
        },
        [...]
      }
    }
  }
}

(Maxime R.) #10

Merci de ces informations.
Je viens de tester manuellement les petits scripts que je vous ai transmit, et l'erreur n'apparait pas.
Donc je pense que mon problème vient plutôt de l'application java qui insert le settings et mapping grace au fichier JSON qui je lui passe en paramètre.
Je vais chercher de ce côté.


(system) #11