2017-07-12 2 views
0

J'ai écrit mon propre serveur ElasticSearch en mémoire dans la version 5.1.1. Cela fonctionne correctement pour l'ajout de documents, mais échoue lors de la suppression.Les conflits Delete_by_query ne fonctionnent pas dans ElasticSearch 5.1.1 avec netty4

dépendances Maven:

<dependency> 
     <groupId>org.elasticsearch</groupId> 
     <artifactId>elasticsearch</artifactId> 
     <version>5.1.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.elasticsearch.plugin</groupId> 
     <artifactId>transport-netty4-client</artifactId> 
     <version>5.1.1</version> 
     <scope>test</scope> 
    </dependency> 

Carte des paramètres pour le nœud:

settingsMap.put("node.name", nodeName); 
    settingsMap.put("path.conf", "target"); 
    settingsMap.put("path.data", "target"); 
    settingsMap.put("path.logs", "target"); 
    settingsMap.put("path.home", "target"); 
    settingsMap.put("http.type", "netty4"); 
    settingsMap.put("http.port", httpPort); 
    settingsMap.put("transport.tcp.port", httpTransportPort); 
    settingsMap.put("transport.type", "netty4"); 
    settingsMap.put("action.auto_create_index", "false"); 

méthode de suppression de nombreux documents une fois:

public boolean deleteType() throws IOException, CustomResponseException { 
    String query = "{\n" + " \"query\": {\n" + " \"match_all\": {}\n" + " }\n" + "}"; 
    HttpEntity entity = new NStringEntity(query, ContentType.APPLICATION_JSON); 
    Response indexResponse = restClient.performRequest("POST", 
      "/" + this.getIndex() + "/" + this.getType() + "/_delete_by_query?conflicts=proceed", 
      Collections.<String, String>emptyMap(), entity); 
    return processStatusCode(indexResponse.getStatusLine()) == 200; 
} 

Quand je lance des tests, j'obtiens l'erreur :

org.elasticsearch.client.ResponseException: POST http://localhost:9205/testindexer/indexer/_delete_by_query?conflicts=proceed : HTTP/1.1 400 Bad Request {"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"request [/testindexer/indexer/_delete_by_query] contains unrecognized parameter: [conflicts]"}],"type":"illegal_argument_exception","reason":"request [/testindexer/indexer/_delete_by_query] contains unrecognized parameter: [conflicts]"},"status":400}

En outre, lorsque je l'exécute sans conflit en cours, je reçois en réponse que le document est créé. Pourquoi ça marche différemment que dans la documentation pour cette version?

Voici l'état de mon noeud:

{ 
    "name" : "indexernode", 
    "cluster_name" : "elasticsearch", 
    "cluster_uuid" : "trP6UQg1SMKVyfR0qTEjYw", 
    "version" : { 
    "number" : "5.1.1", 
    "build_hash" : "5395e21", 
    "build_date" : "2016-12-06T12:36:15.409Z", 
    "build_snapshot" : false, 
    "lucene_version" : "6.3.0" 
}, 
"tagline" : "You Know, for Search" 
} 

Répondre

0

Side note: Ce n'est pas la bonne façon de supprimer toutes les données d'index, mais je suppose que vous êtes au courant de cela. Pouvez-vous essayer de fournir le paramètre dans le client comme un paramètre et non comme une partie de l'URL, jsut pour s'assurer que ce n'est pas le problème.

Je pense que le problème principal est que vous avez dit que vous utilisez votre propre version intégrée de elasticsearch (c'est ce que vous voulez dire en mémoire). Avez-vous vérifié que le plugin reindex est installé avec cette version?