2016-10-21 2 views
1

J'essaie d'ajouter un analyseur personnalisé à la recherche élastique. J'ai une trop grande liste de "mappings" de synonymes (mapper_list). La taille de mapper_list est d'environ 30.000 éléments.Analyseur personnalisé avec grande création de liste char_filter pour elasticsearch

requests.post(es_host + '/_close') 

settings = { 
    "settings" : { 
     "analysis" : { 
      "char_filter" : { 
       "my_mapping" : { 
        "type" : "mapping", 
        "mappings" : mapper_list 
       } 
      }, 
      "analyzer" : { 
       "my_analyzer" : { 
        "tokenizer" : "standard", 
        "char_filter" : ["my_mapping"] 
       } 
      } 
     } 
    } 
} 

requests.put(es_host + '/_settings', 
      data=json.dumps(settings)) 

requests.post(es_host + '/_open') 

Erreur messege de la recherche elasetic

[test-index] IndexCreationException[failed to create index]; nested: ArrayIndexOutOfBoundsException[256]; 
    at org.elasticsearch.indices.IndicesService.createIndex(IndicesService.java:360) 
    at org.elasticsearch.indices.cluster.IndicesClusterStateService.applyNewIndices(IndicesClusterStateService.java:313) 
    at org.elasticsearch.indices.cluster.IndicesClusterStateService.clusterChanged(IndicesClusterStateService.java:174) 
    at org.elasticsearch.cluster.service.InternalClusterService.runTasksForExecutor(InternalClusterService.java:610) 
    at org.elasticsearch.cluster.service.InternalClusterService$UpdateTask.run(InternalClusterService.java:772) 
    at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.runAndClean(PrioritizedEsThreadPoolExecutor.java:231) 
    at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:194) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 

S'il vous plaît, des commentaires sur les moyens de résoudre ce problème.

Informations sur la version ES:

"version" : { 
    "number" : "2.4.1", 
    "build_hash" : "c67dc32e24162035d18d6fe1e952c4cbcbe79d16", 
    "build_timestamp" : "2016-09-27T18:57:55Z", 
    "build_snapshot" : false, 
    "lucene_version" : "5.5.2" 
    } 

Répondre

0

Je pense que la cause de l'erreur est due à la cartographie des grandes phrases. Qu'est-ce que vous essayez exactement de cartographier? Il y a une limite de 256 caractères si vous regardez le source code et vous enfreignez cette limite. Je reçois la même exception

ArrayIndexOutOfBoundsException [256]

si je tente de cartographier les grandes chaînes.

{ 
    "settings": { 
    "analysis": { 
     "char_filter": { 
     "my_mapping": { 
      "type": "mapping", 
      "mappings": ["More than 256 characters. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. => exception will be thrown"] 
     } 
     }, 
     "analyzer": { 
     "my_analyzer": { 
      "tokenizer": "standard", 
      "char_filter": [ 
      "my_mapping" 
      ] 
     } 
     } 
    } 
    } 
} 

Je ne sais pas votre cas d'utilisation, mais vous devez réduire la longueur des chaînes que vous êtes la cartographie, il devrait fonctionner.