Hi, I see what you were asking about now.
Yes, it doesn’t make sense to sink an object to Elasticsearch. You either need to transform the object to a JSON using libraries like Protobuf / Jackson / etc., or disintegrate it yourself into a Map. One thing I noticed is: json.put("json", JsonFormat.printToString(element)) If what you want is all fields in this object to be able to be queried in Elasticsearch, what you could do is simply: `Requests.indexRequest().index(...).type(…).source(<the JSON string>)` This would work fine, and you can also save the extra redundant layer in your sinked JSON. On 17 August 2017 at 11:23:15 AM, mingleizhang (18717838...@163.com) wrote: Ahhh. Sorry Ted. I didnt see the code was broken. Yep, I will directly put the text code here. Dependency is <dependency> <groupId>com.googlecode.protobuf-java-format</groupId> <artifactId>protobuf-java-format</artifactId> <version>1.2</version> </dependency> And the adding code is like following. This time, although I sink an object to Elasticsearch, I convert it to a JSON by JsonFormat.printToString(element). And it can solve my issue as I can get my data from Elasticsearch represent as a json string, then I can use it to show my data as a front end. // sink the filtered data to ElasticSearch clickStreamFiltered.addSink(new ElasticsearchSink[ActivityInfo](configElasticSearch, transportAddress, new ElasticsearchSinkFunction[ActivityInfo] { def createIndexRequest(element: ActivityInfo): IndexRequest = { val json = new java.util.HashMap[String, AnyRef] json.put("activityInfo", element) json.put("mid", element.getMid) json.put("activity", element.getActivity) json.put("json", JsonFormat.printToString(element)) Requests.indexRequest().index("filter_event_tracking").`type`("my-type-2").source(json) } override def process(activityInfo: ActivityInfo, runtimeContext: RuntimeContext, requestIndexer: RequestIndexer): Unit = { requestIndexer.add(createIndexRequest(activityInfo)) } })) Peace. zhangminglei / mingleizhang At 2017-08-17 09:21:47, "Ted Yu" <yuzhih...@gmail.com> wrote: Did you use image for the code ? Can you send plain code again ? Cheers -------- Original message -------- From: mingleizhang <18717838...@163.com> Date: 8/16/17 6:16 PM (GMT-08:00) To: mingleizhang <18717838...@163.com> Cc: "Tzu-Li (Gordon) Tai" <tzuli...@apache.org>, user@flink.apache.org Subject: Re:Re:Re:Re:How to verify the data to Elasticsearch whether correct or not ? I solved the issue by adding a dependency that convert the protobuf objects into a JSON. By adding a line of code like below: element is a PB object. Thanks. zhangminglei At 2017-08-16 22:52:30, "mingleizhang" <18717838...@163.com> wrote: I looked into the sinked data which in ElasticSearch. Good news I can found it is really right there. But but, I sinked the data is an object. But the Elasticsearch represent it as a string. I put the related code below. element type is an ActivityInfo. then, I wrote a java api to read the data. the value is a string instead. I want it represented as an object of ActivityInfo. But it didnt do like what i want. Can anybody give me some advice for it ? Thank you very much! Thanks zhangminglei / mingleizhang At 2017-08-16 20:52:34, "mingleizhang" <18717838...@163.com> wrote: Hi, Gordon. I am not sure about this, as far as I know. ElasticSearch often store JSON data inside it as it is convenient to create it's index. As refers to my code below, I stored the protobuf objects (ActivityInfo which build from activityinfo.proto file) in ElasticSearch. And it is a binary data stored in it. It is very strange I feel. Flink document just give an example for it's data which type belongs to a string as JSON. Peace, Zhangminglei At 2017-08-16 13:27:10, "Tzu-Li (Gordon) Tai" <tzuli...@apache.org> wrote: Hi, I couldn’t spot anything off in the code snippet you provided. So you should be ok with this :) Cheers, Gordon On 15 August 2017 at 9:18:59 PM, mingleizhang (18717838...@163.com) wrote: BTW, ActivityInfo is an PB object build from xxx.proto. And already has it's value setted to itself. At 2017-08-15 21:17:00, "mingleizhang" <18717838...@163.com> wrote: Hi, flink experts! I sinked my data ( PB objects ) to elasticsearch. I dont know whether the sinked data is correct or incorrect. The codes like following, Could you help me check it please ? Im not familar with ES. Now, I want to install a kibana to view my data. But I dont know the below codes is correct or incorrect. I ran the flink program. it does not give me an error. I just want to confirm. // sink the filtered data to ElasticSearch clickStreamFiltered.addSink(new ElasticsearchSink[ActivityInfo](configElasticSearch, transportAddress, new ElasticsearchSinkFunction[ActivityInfo] { def createIndexRequest(element: ActivityInfo): IndexRequest = { val json = new java.util.HashMap[String, ActivityInfo] json.put("data", element) Requests.indexRequest().index("filter-index-s").`type`("my-type").source(json) } override def process(activityInfo: ActivityInfo, runtimeContext: RuntimeContext, requestIndexer: RequestIndexer): Unit = { requestIndexer.add(createIndexRequest(activityInfo)) } })) Thanks mingleizhang 【网易自营】好吃到爆!鲜香弹滑加热即食,经典13香/麻辣小龙虾仅75元3斤>> 【网易自营】好吃到爆!鲜香弹滑加热即食,经典13香/麻辣小龙虾仅75元3斤>> 【网易自营】好吃到爆!鲜香弹滑加热即食,经典13香/麻辣小龙虾仅75元3斤>>