ElasticSearch数据导入
ccwgpt 2024-11-26 01:04 31 浏览 0 评论
作者:dominating
本文将介绍通过logstash收集.csv文件,oracle数据库数据再导入到ElasticSearch中,以及SuperMapiClient for JavaScript9D与ElasticSearch的结合使用。
###安装logstash
1、官网下载logstash-6.1.2.tar.gz,https://www.elastic.co/downloads/logstash
解压到/opt下
2、测试
运行logstash
bin/logstash-e 'input { stdin { } } output { stdout {} }'
输入helloworld,logstash将会输出内容到控制台
2018-01-29T16:36:49,507 +0000 0.0.0.0 hello world
###导入.csv文件
编写配置文件
收集和导入数据需要借助logstash的input,filter,output插件来编写配置文件:
input{
file {
path => ["/opt/flights2.csv"]
start_position => "beginning"
}
}
filter{
csv {
separator => ","
columns => ["ident","lon","lat","temp","origin","destination"]
}
}
output{
elasticsearch {
hosts => ["192.168.255.143:9200"]
index => "flight"
}
}
参数说明:
input插件
file:数据来源为文件型
path:#必选项,配置文件路径.如我使用的以下.csv文件
start_position:logstash从哪个位置读取文件数据,默认从尾部,值为:end,如果要导入历史数据则设置成:beginning
filter插件
csv:csv文件过滤器
separator:定义列分割符值。默认为逗号’,’
columns:定义一个列名称列表,按照在CSV中出现的顺序
output插件
elasticsearch输出目标为elasticsearch,配置host和index索引名
运行logstash
/opt/logstash-6.1.2/bin/logstash-f /opt/test.conf
-f:指定配置文件路径
查看ElasticSearch
"took":9,
"timed_out":false,
"_shards":{
"total":5,
"successful":5,
"skipped":0,
"failed":0
},
"hits":{
"total":100,
"max_score":1.0,
"hits":[{
"_index":"flight",
"_type":"doc",
"_id":"9pMPQWEBy48LTNYe0eDu",
"_score":1.0,
"_source":{
"temp":"1.49E+12",
"@timestamp":"2018-01-29T08:36:50.287Z",
"host":"ubuntu-node3",
"lat":"29.824944",
"ident":"T0000",
"origin":"Lishe",
"destination":"Jiangbei",
"message":"T0000,121.465069,29.824944,1.49E+12,Lishe,Jiangbei",
"@version":"1",
"path":"/opt/flights2.csv",
"lon":"121.465069"
}
}]
}
可以看到导入了100条数据,并且能够被查询到。
###导入oracle数据
需要在logstash所在机器上提前安装oracle客户端,并且配置好oracle的环境变量
测试oracle数据库是否能正常通讯
编写logstash配置文件
需要导入的oracle数据
input{
jdbc {
jdbc_driver_library => "/opt/ojdbc6.jar"
jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
jdbc_connection_string =>"jdbc:oracle:thin:@//192.168.15.89:1521/supermap"
jdbc_user => "liu"
jdbc_password => "supermap"
schedule => "* * * * *"
statement => "select * from SMDTV_341"
type => "jdbc"
last_run_metadata_path =>"/home/elsearch/logstash-oradb.lastrun"
}
}
filter{
}
output{
elasticsearch {
hosts => ["192.168.255.143:9200"]
index => "test"
}
}
参数说明:
jdbc_driver_library:在oracle目录下,如我的在D:appwangwuproduct.2.0dbhome_1jdbclib下面,复制到指定目录
schedule:查询间隔,"** * **"每分钟查询一次,不设置则只执行一次
last_run_metadata_path:最后更新时间文件位置
statement:SQL查询语句
index:索引,可以先创建一个索引再导入
将文件保存为jdbc.conf放在logstash所在机器,运行
/opt/logstash-6.1.2/bin/logstash-f /opt/jdbc.conf
查看结果
说明数据已经导入成功,并且能够被查询到。
###导入地理坐标点数据
ElasticSearch提供了地理位置功能,并且能够把地理位置、全文搜索、结构化搜索和分析结合到一起。
ElasticSearch中存储地理坐标数据需要使用geo-point类型,并且必须提前显式声明
1、创建索引,并且声明location为geo-point类型
curl-XPUT '192.168.255.143:9200/test3?pretty' -H 'Content-Type:application/json' -d'
{
"mappings": {
"capital" : {
"properties" : {
"location" : {
"type" : "geo_point"
}
}
}
}
}
'
创建索引test3,映射字段location,并且声明为geo-point类型
2、编写配置文件
将带地理坐标的数据导入到ElasticSearch中
input{
jdbc {
jdbc_driver_library => "/opt/ojdbc6.jar"
jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
jdbc_connection_string =>"jdbc:oracle:thin:@//192.168.15.89:1521/supermap"
jdbc_user => "liu"
jdbc_password => "supermap"
statement => "select * from SMDTV_361"
type => "jdbc"
last_run_metadata_path =>"/home/elsearch/logstash-oradb.lastrun"
}
}
filter{
mutate {
add_field => {"location" => "%{smy},%{smx}"}
}
}
output{
elasticsearch {
hosts => ["192.168.255.143:9200"]
index => "test3"
document_type => "capital"
}
}
由于原表中并没有location字段,所以filter中使用mutate插件给收集到的数据添加字段location
3、执行导入命令
/opt/logstash-6.1.2/bin/logstash-f /opt/jdbc.conf
4、网格聚合
将地理位置数据导入成功之后,我们就可以使用ElasticSearch提供的地理位置功能了,以下我们将执行Geohash网格聚合:
curl-XGET '192.168.255.143:9200/test3/capital/_search?pretty' -H'Content-Type: application/json' -d'
{
"query": {
"constant_score": {
"filter": {
"geo_bounding_box": {
"location": {
"top_left": {
"lat": 90,
"lon": -180
},
"bottom_right": {
"lat": -90,
"lon": 180
}
}
}
}
}
},
"aggs": {
"world": {
"geohash_grid": {
"field": "location",
"precision": 1
}
}
}
}
'
如果对Geohash不太明白,可以参考官方的文档:https://www.elastic.co/guide/cn/elasticsearch/guide/current/geohash-grid-agg.html
###SuperMapiClient for JavaScript 9D和ElasticSearch的结合使用
SuperMapiClient for JavaScript 9D封装了ElasticSearch的JavaScriptAPI,我们以forLeaflet为例查询之前导入的数据。
1、定义服务
liveESService= new SuperMap.ElasticSearch("http://192.168.255.143:9200");
2、传入查询条件,成功回调函数
functionloadLiveData() {
var liveParameters = [];
liveParameters.push({index: "flight"});
liveParameters.push({
"query": {
"match_all":{}
},
"from": 0,
"size": 100
});
liveESService.msearch({body: liveParameters}, function (error,result) {
if (error) {
widgets.alert.showAlert(JSON.stringify(error),false);
return;
}
renderLive(result.responses);
});
}
使用newSuperMap.ElasticSearch(url).msearch(params,callback)方法,传入查询参数,定义回调函数
3、处理数据添加到地图
4、更多关于SuperMapiClient for JavaScript9D和ElasticSearch的结合使用的例子
http://iclient.supermap.io/examples/leaflet/examples.html#Elasticsearch
热力/网格图
航班监控
相关推荐
- 一个基于.Net Core遵循Clean Architecture原则开源架构
-
今天给大家推荐一个遵循CleanArchitecture原则开源架构。项目简介这是基于Asp.netCore6开发的,遵循CleanArchitecture原则,可以高效、快速地构建基于Ra...
- AI写代码翻车无数次,我发现只要提前做好这3步,bug立减80%
-
写十万行全是bug之后终于找到方法了开发"提示词管理助手"新版本那会儿,我差点被bug整崩溃。刚开始两周,全靠AI改代码架构,结果十万行程序漏洞百出。本来以为AI说没问题就稳了,结果...
- OneCode低代码平台的事件驱动设计:架构解析与实践
-
引言:低代码平台的事件驱动范式在现代软件开发中,事件驱动架构(EDA)已成为构建灵活、松耦合系统的核心范式。OneCode低代码平台通过创新性的注解驱动设计,将事件驱动理念深度融入平台架构,实现了业务...
- 国内大厂AI插件评测:根据UI图生成Vue前端代码
-
在IDEA中安装大厂的AI插件,打开ruoyi增强项目:yudao-ui-admin-vue31.CodeBuddy插件登录腾讯的CodeBuddy后,大模型选择deepseek-v3,输入提示语:...
- AI+低代码技术揭秘(二):核心架构
-
本文档介绍了为VTJ低代码平台提供支持的基本架构组件,包括Engine编排层、Provider服务系统、数据模型和代码生成管道。有关UI组件库和widget系统的信息,请参阅UI...
- GitDiagram用AI把代码库变成可视化架构图
-
这是一个名为gitdiagram的开源工具,可将GitHub仓库实时转换为交互式架构图,帮助开发者快速理解代码结构。核心功能一键可视化:替换GitHubURL中的"hub...
- 30天自制操作系统:第六天:代码架构整理与中断处理
-
1.拆开bootpack.c文件。根据设计模式将对应的功能封装成独立的文件。2.初始化pic:pic(可编程中断控制器):在设计上,cpu单独只能处理一个中断。而pic是将8个中断信号集合成一个中断...
- AI写代码越帮越忙?2025年研究揭露惊人真相
-
近年来,AI工具如雨后春笋般涌现,许多人开始幻想程序员的未来就是“对着AI说几句话”,就能轻松写出完美的代码。然而,2025年的一项最新研究却颠覆了这一期待,揭示了一个令人意外的结果。研究邀请了16位...
- 一键理解开源项目:两个自动生成GitHub代码架构图与说明书工具
-
一、GitDiagram可以一键生成github代码仓库的架构图如果想要可视化github开源项目:https://github.com/luler/reflex_ai_fast,也可以直接把域名替换...
- 5分钟掌握 c# 网络通讯架构及代码示例
-
以下是C#网络通讯架构的核心要点及代码示例,按协议类型分类整理:一、TCP协议(可靠连接)1.同步通信//服务器端usingSystem.Net.Sockets;usingTcpListene...
- 从复杂到优雅:用建造者和责任链重塑代码架构
-
引用设计模式是软件开发中的重要工具,它为解决常见问题提供了标准化的解决方案,提高了代码的可维护性和可扩展性,提升了开发效率,促进了团队协作,提高了软件质量,并帮助开发者更好地适应需求变化。通过学习和应...
- 低代码开发当道,我还需要学习LangChain这些框架吗?| IT杂谈
-
专注LLM深度应用,关注我不迷路前两天有位兄弟问了个问题:当然我很能理解这位朋友的担忧:期望效率最大化,时间用在刀刃上,“不要重新发明轮子”嘛。铺天盖地的AI信息轰炸与概念炒作,很容易让人浮躁与迷茫。...
- 框架设计并不是简单粗暴地写代码,而是要先弄清逻辑
-
3.框架设计3.框架设计本节我们要开发一个UI框架,底层以白鹭引擎为例。框架设计的第一步并不是直接撸代码,而是先想清楚设计思想,抽象。一个一个的UI窗口是独立的吗?不是的,...
- 大佬用 Avalonia 框架开发的 C# 代码 IDE
-
AvalonStudioAvalonStudio是一个开源的跨平台的开发编辑器(IDE),AvalonStudio的目标是成为一个功能齐全,并且可以让开发者快速使用的IDE,提高开发的生产力。A...
- 轻量级框架Lagent 仅需20行代码即可构建自己的智能代理
-
站长之家(ChinaZ.com)8月30日消息:Lagent是一个专注于基于LLM模型的代理开发的轻量级框架。它的设计旨在简化和提高这种模型下代理的开发效率。LLM模型是一种强大的工具,可以...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- mfc框架 (52)
- abb框架断路器 (48)
- beego框架 (52)
- java框架spring (58)
- grpc框架 (65)
- tornado框架 (48)
- 前端框架bootstrap (54)
- orm框架有哪些 (51)
- 知识框架图 (52)
- ppt框架 (55)
- 框架图模板 (59)
- 内联框架 (52)
- cad怎么画框架 (58)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)