2016-06-09 6 views
2

Ich versuche, die Löschung eines Dokuments im Frühjahr Daten elasticsearch Repository zu erhalten. Und nicht finden kann, Art und Weise, wie dieser Fehler zu beheben:Gibt es Unterstützung für das Routing beim Löschen im Repository oder in der Abfrageanmerkung?

[userindex] RoutingMissingException[routing is required for [userindex]/[address]/[12]

Ich habe zwei verknüpfte Dokumente:

@Document(indexName = "userindex", type = "user") 
public class User { 

    @Field(index = FieldIndex.not_analyzed, type = FieldType.Long) 
    private Long userId; 
    ... 
} 

@Document(indexName = "userindex", type = "address") 
public class Address { 

    @Field(type = FieldType.String) 
    private String name; 

    @Field(index = FieldIndex.not_analyzed, type = FieldType.String) 
    private String addressId; 

    @Field(type = FieldType.String, store = true) 
    @Parent(type = "user") 
    private String parentId; 
    ... 
} 

Wenn ich versuche, eine Adresse über ElasticsearchCrudRepository löschen < Adresse, Lange > unter Verwendung Standardmethode delete (Lange ID) I empfange RoutingMissingException wie oben erwähnt.

Wenn ich versuche, es zu tun ElasticSeach Client verwenden, wie folgt aus:

client.prepareDelete().setIndex("userindex") 
    .setType("address") 
    .setParent("user") 
    .setId(id.toString()) 
    .execute().get(); 

alles funktioniert gut, aber scheint mir direkt die Arbeit mit Kunden ist nicht die Feder-Daten Art und Weise.

Auch ich kann keinen Weg finden, wie lösche Methode mit Annotation org.springframework.data.elasticsearch.annotations.Query anpassen. Ich überprüft Quellen von org.springframework.data.elasticsearch.core.ElasticsearchTemplate und kann keine Möglichkeit finden, wie Sie Unterstützung für die Abfrage löschen hinzufügen.

Weiß jemand, wie man es löst, anstatt einen Klienten zu benutzen?

Die Version von Feder-data-Elasticsearch ist 2.0.1

-Update 03.05.2017

Vor allem in meinem Code ein Fehler mit meiner Löschung war, nicht wie es funktionierte vor, aber es sollte sein:

client.prepareDelete().setIndex("userindex") 
    .setType("address") 
    .setParent("500") 
    .setId(id.toString()) 
    .execute().get(); 

Hier Eltern-ID ist statt Typnamen. Und jetzt über die Federdaten Weg. Es gibt keinen Feder-Daten-Weg in der ElasticSearch-Integration.

Beweis:

DATAES-257

DATAES-331

Antwort

-1

Wenn Sie den Frühling Art und Weise tun möchten, können Sie ElasticsearchTemplate verwenden, die RestTemplate viel ähnlich ist. ElasticsearchTemplate hat deleteIndex() -Funktion, die den gesamten Index löschen kann. Außerdem können Sie mit der Vorlage viele andere Dinge tun. Beispielprojekt mit Löschindex ist hier: https://github.com/TechPrimers/spring-data-elastic-example-4/blob/master/src/main/java/com/techprimers/elastic/resource/SearchResource.java

Code:

@Autowired 
ElasticsearchTemplate template; 

template.deleteIndex(Users.class); 
+0

Ok, hässlichste Lösung überhaupt. Sollte ich den 2GB-Index löschen und jedes Mal neu erstellen, wenn ich einen Datensatz löschen muss? – m1ld

+0

kann nicht einmal als Lösung betrachtet werden – berkayk

Verwandte Themen