2016-04-01 5 views
0

Hallo Jungs, ich bin neu bei elasticsearch und ich versuche, den Fehler im Moment hier zu bekommen. Also ich möchte nur einen einzelnen Feldwert zum Beispiel "xmldata", die ich in einem früheren Prozess in der XML-Datei hinzugefügt habe. Das xml ist so formatiert, dass es erfolgreich auf meinen ES-Server geladen wurde, die json Datei ist korrekt.Elasticsearch Holen Sie sich die Werte eines Feldes - Java API

Hier mein Code:

 Client client = TransportClient.builder().build() 
      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300)); 

    // GetResponse response = client.prepareGet("store", "xml", 
    // xsdid).setFields("xmldata").execute().actionGet(); 
    GetResponse response = client.prepareGet().setIndex("store").setType("xml").setId(xsdid).setFields("xml").execute().actionGet(); 

    String id = (String) response.getSource().get("xml"); 

i follow Fehler bin immer:

MapperParsingException[failed to parse]; nested: IllegalArgumentException[Malformed content, found extra data after parsing: START_OBJECT];

Meine XML sieht wie folgt aus, wenn Sie es brauchen:

<?xml version="1.0" encoding="UTF-8"?><XmlDoc><FunctionResult result="success"><Message>Processed Correct!</Message></FunctionResult> 
<billing> 
<billing_id>571</billing_id> 
<appid>mft</appid> 
<senderbtid>20041900-107</senderbtid> 
<receiverbtid>20041900-40</receiverbtid> 
<messagetype>M_SLSRPT</messagetype> 
<messageid>83815</messageid> 
<messageprops/> 
<tmid>842</tmid> 
<tmmsgcnt>0</tmmsgcnt> 
<tmmsgtotal>1</tmmsgtotal> 
<procdate>2014-12-02T03:10:15.406</procdate> 
<xmldata>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48WG1sRG9jPg0KPGJpbGxpbmc+DQo8YmlsbGluZ19pZD41NzE8L2JpbGxpbmdfaWQ+DQo8YXBwaWQ+bWZ0PC9hcHBpZD4NCjxzZW5kZXJidGlkPjIwMDQxOTAwLTEwNzwvc2VuZGVyYnRpZD4NCjxyZWNlaXZlcmJ0aWQ+MjAwNDE5MDAtNDA8L3JlY2VpdmVyYnRpZD4NCjxtZXNzYWdldHlwZT5NX1NMU1JQVDwvbWVzc2FnZXR5cGU+DQo8bWVzc2FnZWlkPjgzODE1PC9tZXNzYWdlaWQ+DQo8bWVzc2FnZXByb3BzLz4NCjx0bWlkPjg0MjwvdG1pZD4NCjx0bW1zZ2NudD4wPC90bW1zZ2NudD4NCjx0bW1zZ3RvdGFsPjE8L3RtbXNndG90YWw+DQo8cHJvY2RhdGU+MjAxNC0xMi0wMlQwMzoxMDoxNS40MDY8L3Byb2NkYXRlPg0KPC9iaWxsaW5nPg0KPC9YbWxEb2M+DQoNCg==</xmldata></billing> 
</XmlDoc> 

Bitte helfen Sie mir! Dank

Antwort

0
Client client = TransportClient.builder().build().addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300)); 

    GetResponse getResponse = client.prepareGet("database", "xsd", xsdid).execute().actionGet(); 

    Map<String, Object> source = getResponse.getSource(); 

Mag ich bin immer die volle json-Datei zurück

aber gibt es eine bessere Möglichkeit, nur die einzelnen (XMLData) zu bekommen?