2016-05-12 9 views
2

Ich möchte einige meiner indizierten Daten mit einem bestimmten Feld mit Java API aktualisieren. Ich habe dieses Dokument https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-docs-update.html verwiesen und ein Java-Programm erstellt. Mein Java-Programm sieht so aus:Aktualisieren mehrerer Dokumente in elasticsearch mit Java. Ich verwende Elasticsearch 2.3.2

public class App { 

    public static void main(String[] args) throws Exception { 
    Client client = TransportClient.builder().build().addTransportAddress(
     new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 
      9300)); 
UpdateRequest updateRequest = new UpdateRequest("pibindex", "SearchTech", 
     "http://www.sea.com/bundle") 
      .script(new Script("ctx._source.default_collection = \"true\"")); 
    client.update(updateRequest).get(); 
    } 
} 

Dieses Programm aktualisiert ein einzelnes Dokument basierend auf einem Skript. "pibindex" ist der Name meines Index, "SearchTech" ist der Typ meines Index und "http://www.sea.com/bundle" ist die ID meines Dokuments. Ich möchte mehrere Dokumente mit einem neuen Feld "wiki_collection": true aktualisieren, das einem Muster wie "http://www.sea.com/bundle" entspricht. Ich möchte Platzhalter-Abfrage verwenden.

Ich versuche, diese Elasticsearch Abfrage in Java zu implementieren:

POST /pibindex2/_update_by_query 
{ 
    "script": { 
    "inline": "ctx._source.wiki_collection=true" 
    }, 
     "query": { 
     "wildcard": { 
      "url": { 
      "value": "http://www.sea.com/bundle/*" 
      } 
     } 
     } 
} 

Sorry, wenn ich offensichtlich etwas fehlt bin. Vielen Dank.

+1

Diese Antwort könnte helfen: http://Stackoverflow.com/a/37042003/4604579 – Val

+0

@Val Ich habe Ihre Antwort weitergeleitet, jetzt kann ich mehrere Dokumente mit "Termquery" aktualisieren. Aber ich muss "Wildcard-Abfrage" verwenden, um mehrere Dokumente zu aktualisieren, die einem Muster entsprechen. Ich habe diesen Link verwiesen: https://www.elastic.co/guide/en/elasticsearch/client/java-api/1.6/wildcard.html, aber es zeigt nicht, wie genau Wildcard in Java zu verwenden ist – Rose

Antwort

3

Sie auf diese Weise versuchen:

import static org.elasticsearch.index.query.QueryBuilders.wildcardQuery; 

BulkIndexByScrollResponse r = ubqrb.source("twitter") 
    .script(script) 
    .filter(wilcardQuery("url", "http://www.sea.com/bundle/*")) 
    .get(); 

Obwohl das Ergebnis davon abhängen, ob Ihr url Feld analysiert wird oder nicht.

+0

Mein " URL "Feld wird nicht analysiert, aber Ihr Code funktioniert. Danke vielmals. Ich war an diesem Ding von den letzten zwei Tagen fest und das offizielle Dokument war nicht so hilfreich. Danke noch einmal. – Rose

+0

genial, froh, dass es geholfen hat! – Val

Verwandte Themen