云南建网站需要多少钱,网站制作的方法,哪些网站做商标注册,wordpress 评论接口在我们之前的很多文章里#xff0c;我有讲到这个话题。在今天的文章中#xff0c;我们就提重谈。我们使用一种新的方法来实现。这是一个基于 golang 的开源项目。项目的源码在 https://github.com/githubesson/csves/。由于这个原始的代码并不支持 basic security 及带有安全…在我们之前的很多文章里我有讲到这个话题。在今天的文章中我们就提重谈。我们使用一种新的方法来实现。这是一个基于 golang 的开源项目。项目的源码在 https://github.com/githubesson/csves/。由于这个原始的代码并不支持 basic security 及带有安全的 SSL ES 连接。我把它进行了一些小的改造。它是一种灵活的工具用于将 CSV 数据导入 Elasticsearch具有自动字段检测和映射功能。 克隆项目
我们在 terminal 中打入如下的命令
git clone https://github.com/liu-xiao-guo/csves
$ pwd
/Users/liuxg/go
$ git clone https://github.com/liu-xiao-guo/csves
cd csves
$ tree -L 3
.
├── LICENSE
├── README.md
├── cmd
│ └── csves
│ └── main.go
├── example.csv
├── fields.json
├── go.mod
├── go.sum
└── pkg├── config│ └── config.go├── csv│ └── service.go├── elasticsearch│ └── service.go└── models└── document.go
为了能够使得我们在下面能够运行应用我们在项目的根目录下创建如下的一个 .env 文件
.env
ELASTICSEARCH_URLhttps://localhost:9200
INDEX_NAMEcsv_test
CSV_FILE_PATH./example.csv
USER_NAMEelastic
PASSWORDy9NWnPq0VWxMXxSmr
FIELD_CONFIG_PATHfields.json
ELASTICSEARCH_CERT_PATH/Users/liuxg/elastic/elasticsearch-8.17.1/config/certs/http_ca.crt
依赖你的配置你需要根据上面的变量值做相应的修改。特别值得注意的是
如果你是 basic 安全设置那么你需要提供 PASSWORD 及 USER_NAME如果你的 Elasticsearch 是带有 SSL 安全的那么针对自签名 Elasticsearch你需要提供 ELASTICSEARCH_CERT_PATH。否则设置它为 “”。
更多有关如何在 golang 里连接到 Elasticsearch请参考文章 “Elasticsearch运用 Go 语言实现 Elasticsearch 搜索 - 8.x”。 前提条件
安装 Go 1.23 及以上。我们在链接下载最新的 Go 来进行安装。安装 Elastic Stack 8.x 参考文章 “如何在 LinuxMacOS 及 Windows 上进行安装 Elasticsearch” 安装 Elasticsearch参考文章 “Kibana如何在 LinuxMacOS 及 Windows 上安装 Elastic 栈中的 Kibana”
为方便测试我们在本文中采用 使用 start-local 脚本在本地运行 Elasticsearch 来进行安装。这个方法的好处是没有安全的安装。它便于测试 编译项目
go build -o csves cmd/csves/main.go
$ pwd
/Users/liuxg/go/csves
$ go build -o csves cmd/csves/main.go
go: downloading github.com/joho/godotenv v1.5.1
go: downloading github.com/elastic/go-elasticsearch/v8 v8.17.1
go: downloading go.opentelemetry.io/otel/trace v1.28.0
go: downloading github.com/elastic/elastic-transport-go/v8 v8.6.1
go: downloading go.opentelemetry.io/otel v1.28.0
go: downloading go.opentelemetry.io/otel/metric v1.28.0
go: downloading github.com/go-logr/logr v1.4.2
go: downloading github.com/go-logr/stdr v1.2.2
$ ls
LICENSE cmd example.csv go.mod pkg
README.md csves fields.json go.sum
我们看到一个新生成的 csves 执行文件。 用法 基本使用
我们使用如下的方法来测试一个 csv 文件是否可以行
./csves -csvexample.csv -test
$ ./csves -csvexample.csv -test
es-url: https://localhost:9200
index: csv_test
csv: ./example.csv
fields: fields.json
fields: fields.json
test: false
username: elastic
password: y9NWnPq0VWxMXxSmr
certpath: /Users/liuxg/elastic/elasticsearch-8.17.1/config/certs/http_ca.crt
Detected delimiter: ;
CSV Header mapping: map[age:1 name:0 sex:2]
Test Mode - Printing all processed records:
Record 1:name: Jerryage: 28sex: Msource_csv: example.csvRecord 2:name: Tomage: 40sex: Fsource_csv: example.csvRecord 3:name: Cherryage: 20sex: Fsource_csv: example.csvTotal records processed: 3
我们的测试 example.csv 文件内容如下
$ vi example.csv name;age;sex
Jerry;28;M
Tom;40;F
Cherry;20;F
我们只选中其中的 name 及 age 字段
./csves -csvexample.csv -selectname,age -test$ ./csves -csvexample.csv -selectname,age -test
es-url: https://localhost:9200
index: csv_test
csv: ./example.csv
fields: fields.json
fields: fields.json
test: false
username: elastic
password: y9NWnPq0VWxMXxSmr
certpath: /Users/liuxg/elastic/elasticsearch-8.17.1/config/certs/http_ca.crt
Detected delimiter: ;
CSV Header mapping: map[age:1 name:0 sex:2]
Test Mode - Printing all processed records:
Record 1:name: Jerryage: 28source_csv: example.csvRecord 2:name: Tomage: 40source_csv: example.csvRecord 3:name: Cherryage: 20source_csv: example.csvTotal records processed: 3 写入数据到 Elasticsearch 中
我们使用如下的命令来把数据写入到 Elasticsearch 中
./csves -csvexample.csv
$ ./csves -csvexample.csv
es-url: https://localhost:9200
index: csv_test
csv: ./example.csv
fields: fields.json
fields: fields.json
test: false
username: elastic
password: y9NWnPq0VWxMXxSmr
certpath: /Users/liuxg/elastic/elasticsearch-8.17.1/config/certs/http_ca.crt
Detected delimiter: ;
CSV Header mapping: map[age:1 name:0 sex:2]
Sample of processed records:
Fields: map[age:28 name:Jerry sex:M source_csv:example.csv]
Fields: map[age:40 name:Tom sex:F source_csv:example.csv]
Total records processed: 3
2025/02/15 13:28:16 All documents indexed successfully
我们在 Kibana 中进行查看
GET csv_test/_search 我们看到有三个文档被成功地写入。
下面我们有选择地写入其中的两个字段name 及 age。我们首先在 Kibana 中执行如下的命令
DELETE csv_test
我们再执行如下的命令
./csves -csvexample.csv -selectname,age
$ ./csves -csvexample.csv -selectname,age
es-url: https://localhost:9200
index: csv_test
csv: ./example.csv
fields: fields.json
fields: fields.json
test: false
username: elastic
password: y9NWnPq0VWxMXxSmr
certpath: /Users/liuxg/elastic/elasticsearch-8.17.1/config/certs/http_ca.crt
Detected delimiter: ;
CSV Header mapping: map[age:1 name:0 sex:2]
Sample of processed records:
Fields: map[age:28 name:Jerry source_csv:example.csv]
Fields: map[age:40 name:Tom source_csv:example.csv]
Total records processed: 3
2025/02/15 13:31:06 All documents indexed successfully
在 Kibana 中进行查看