2015-09-17 1 views
2

Ma cartographie a 4 champs de chaîne:Comment utiliser différents analyseurs dans Elasticsearch en fonction du document à insérer?

  • "name"
  • "info"
  • "langue"
  • "genre"

et 4 analyseurs personnalisés:

  • "english_custom_analyzer"
  • "french_custom_analyzer"
  • "spanish_custom_analyzer"
  • "arabic_custom_analyzer"

Je veux être en mesure de préciser l'analyseur à utiliser lors de l'insertion du document en utilisant le champ linguistique. Donc, si la langue est l'anglais, je veux utiliser le champ analyseur anglais pour les documents et si la langue est le français, je veux utiliser l'analyseur français.

J'ai essayé de créer un champ supplémentaire appelé "language_name_analyzer", remplir ce champ avec le nom de l'analyseur lors de l'insertion et définir le nom de l'analyseur sur "language_name_analyzer". Mais je reçois cette erreur:

Cause: org.elasticsearch.index.mapper.MapperParsingException: Analyzer [language_name_analyzer] not found for field [datacontent_onair_title] 

Merci

Répondre

1

Tout d'abord, je vous recommande de revenir d'utiliser cette fonction puisqu'il has been removed de la prochaine version majeure de ElasticSearch 2.0.

Si vous voulez continuer à l'utiliser, vous devez spécifier le chemin du champ language_name_analyzer dans la cartographie:

{ 
    "type1" : { 
     "_analyzer" : { 
      "path" : "language_name_analyzer" 
     }, 
     "properties": { 
      //// your other fields 
     } 
    } 
} 
+0

Merci. Y a-t-il une meilleure solution à mon problème? Je ne peux pas être le seul à devoir prendre en charge plusieurs analyseurs de langage. – danielz

+0

Oui, veuillez consulter [Pièges des langues de mixage] (https://www.elastic.co/guide/en/elasticsearch/guide/current/language-pitfalls.html) et les sections suivantes du guide définitif. – imotov

+0

Merci, j'ai fini par créer un index séparé pour chaque langue et faire une requête de recherche qui a cherché dans tous les index. – danielz