elasticsearch Elasticsearch连接器作为Flink中的源,elasticsearch,apache-flink,elasticsearch,Apache Flink" /> elasticsearch Elasticsearch连接器作为Flink中的源,elasticsearch,apache-flink,elasticsearch,Apache Flink" />

elasticsearch Elasticsearch连接器作为Flink中的源

elasticsearch Elasticsearch连接器作为Flink中的源,elasticsearch,apache-flink,elasticsearch,Apache Flink,我使用Elasticsearch连接器作为接收器将数据插入Elasticsearch(请参阅:) 但是,我并没有找到任何从Elasticsearch获取数据作为源的连接器 在Flink pipline中是否有使用Elasticsearch文档作为源的连接器或示例 问候, 阿里我不知道弗林克有明确的ES来源。我确实看到一个用户在谈论将Flink用作HadoopInputFormat,但我不知道这是否对他们有效(请参见)。我最终定义了一个简单的读取ElasticSearch函数 public

我使用Elasticsearch连接器作为接收器将数据插入Elasticsearch(请参阅:)

但是,我并没有找到任何从Elasticsearch获取数据作为源的连接器

在Flink pipline中是否有使用Elasticsearch文档作为源的连接器或示例

问候,


阿里

我不知道弗林克有明确的ES来源。我确实看到一个用户在谈论将Flink用作HadoopInputFormat,但我不知道这是否对他们有效(请参见)。

我最终定义了一个简单的读取ElasticSearch函数

    public static class ElasticsearchFunction
        extends ProcessFunction<MetricMeasurement, MetricPrediction> {

    public ElasticsearchFunction() throws UnknownHostException {
        client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new TransportAddress(InetAddress.getByName("YOUR_IP"), PORT_NUMBER));
    }

    @Override
    public void processElement(MetricMeasurement in, Context context, Collector<MetricPrediction> out) throws Exception {
        MetricPrediction metricPrediction = new MetricPrediction();

        metricPrediction.setMetricId(in.getMetricId());
        metricPrediction.setGroupId(in.getGroupId());
        metricPrediction.setBucket(in.getBucket());

        // Get the metric measurement from Elasticsearch
        SearchResponse response = client.prepareSearch("YOUR_INDEX_NAME")
                .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
                .setQuery(QueryBuilders.termQuery("YOUR_TERM", in.getMetricId()))   // Query
                .setPostFilter(QueryBuilders.rangeQuery("value").from(0L).to(50L))     // Filter
                .setFrom(0).setSize(1).setExplain(true)
                .get();

        SearchHit[] results = response.getHits().getHits();
        for(SearchHit hit : results){
            String sourceAsString = hit.getSourceAsString();
            if (sourceAsString != null) {
                ObjectMapper mapper = new ObjectMapper();
                MetricMeasurement obj = mapper.readValue(sourceAsString, MetricMeasurement.class);
                obj.getMetricId();
                metricPrediction.setPredictionValue(obj.getValue());
            }
        }
        out.collect(metricPrediction);
    }
}
公共静态类ElasticsearchFunction
扩展ProcessFunction{
public ElasticsearchFunction()抛出UnknownHostException{
客户端=新的预构建传输客户端(设置)
.addTransportAddress(新的TransportAddress(InetAddress.getByName(“您的IP”),端口号));
}
@凌驾
public void processElement(MetricMeasurement in、Context、Collector out)引发异常{
MetricPrediction MetricPrediction=新的MetricPrediction();
setMetricId(在.getMetricId()中);
metricPrediction.setGroupId(在.getGroupId()中);
metricPrediction.setBucket(在.getBucket()中);
//从Elasticsearch获取度量值
SearchResponse=client.prepareSearch(“您的索引名称”)
.setSearchType(SearchType.DFS\u QUERY\u然后\u FETCH)
.setQuery(QueryBuilders.termQuery(“您的_术语”,in.getMetricId())//查询
.setPostFilter(QueryBuilders.rangeQuery(“值”).from(0L).to(50L))//过滤器
.setFrom(0).setSize(1).setExplain(真)
.get();
SearchHit[]results=response.getHits().getHits();
用于(搜索命中:结果){
字符串sourceAsString=hit.getSourceAsString();
if(sourceAsString!=null){
ObjectMapper mapper=新的ObjectMapper();
MetricMeasurement obj=mapper.readValue(sourceAsString,MetricMeasurement.class);
obj.getMetricId();
metricPrediction.setPredictionValue(obj.getValue());
}
}
out.收集(metricPrediction);
}
}