原创声明:本文首发腾讯云·云+社区,未经允许,不得转载
前文写过,如何将linux日志导入到kibana----《ElasticSearch实战:Linux日志对接Kibana》,本文主要解决另一个问题:如何将非格式化的文本文件(如TXT等)导入到kibana中。
下面,我们以《中华人民共和国刑法.txt》为例,详细介绍如何进行处理。
根据官方文档 https://www.elastic.co/guide/en/kibana/current/tutorial-load-dataset.html 的介绍,提供了几组已经格式化的数据,下面以shakespeare.json
来详细分析。
据上图,我们可以看到,格式化的json数据主要分两部分,一部分负责描述索引,如 :
{"index":{"_index":"shakespeare","_id":0}}
另一部分,用来描述文档内容:
{"type":"act","line_id":1,"play_name":"Henry IV", "speech_number":"","line_number":"","speaker":"","text_entry":"ACT I"}
因此,我们也需要将《刑法》文本处理为该格式。
2,导入前的准备
根据官方文档介绍,导入数据前,我们首先需要在Kibana上为该索引创建映射mapping,可以简单地理解为,为一个表格编写好表头。然后,再使用PUT语句将数据导入。
这里我们采用python3进行文本处理,处理的原则是,以换行符为界,每一行,做为一个独立的文档(doc)。最终输出json文件。
#python 3.6
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'BH8ANK'
'''
最终将输出格式改为
{"indeeach_row":{"_index":"xingfa","_id":1}}
{"text_entry":"犯罪的行为或者结果有一项发生在中华人民共和国领域内的,就认为是在中华人民共和国领域内犯罪。"}
'''
'''读取文件
'''
a = open(r"D:\xingfa.txt", "r",encoding='utf-8')
out = a.read()
#print(out)
read_result = out.split('\n')
#print(read_result)
lenth = len(read_result)
print(lenth)
number = 1
ju_1 = '{"index":{"_index":"xingfa","_id":'
ju_2 = '{"text_entry":"'
# print(ju_1)
for each_row in read_result:
#第奇数行,输出对索引的描述
res_1 = ju_1 + str(number) + '}}'+'\n'
print(res_1)
a = open(r"D:\out.json", "a", encoding='UTF-8')
a.write(res_1)
#第偶数行,输出文档(doc)的内容
res_2 = ju_2 + each_row + '"}'+'\n'
print(res_2)
a = open(r"D:\out.json", "a", encoding='UTF-8')
a.write(res_2)
a.close()
number+=1
print("文件格式化完成!")
上述代码执行后,输出的格式化文件内容如下图:
PUT /xingfa
{
"mappings": {
"doc": {
"properties": {
"text_entry": {"type": "keyword"}
}
}
}
}
[root@VM_0_7_centos elasticsearch]# curl -H 'Content-Type: application/x-ndjson' -XPOST '10.0.0.24:9200/xingfa/doc/_bulk?pretty' --data-binary @out.json
{
"took" : 300,
"errors" : false,
"items" : [
{
"index" : {
"_index" : "xingfa",
"_type" : "doc",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 2,
"failed" : 0
},
"created" : true,
"status" : 201
}
},
…………
(略)
…………
登录kibana管理页,确认上面的数据是否已成功导入。
GET /_cat/indices?v
查看索引内容
GET /xingfa/_search/
{
"query": {
"match_all": {}
},
"size": "9999"
}
至此,我们已将《刑法》文本,导入到kibana中了。
这里简单讲一下,如何使用Kibana进行数据检索。例如,我们需要查询《刑法》中,有关“走私”和“拐卖”的相关条款。
(1)在kibana首页,打开Discover,在页面中,新增索引类型,类型名与上面导入数据的index名保持一致,即“xingfa”,然后点击"Creat",等待几秒到几分钟,如下图
(2)索引类型添加完成后,会自动跳转到配置页,此时,我们重新打开Discover,即可进行关键字检索,如下图:
(点击图片可看高清大图)
至此,我们已将普通文本导入到kibana中,并可以通过kibana进行关键字检索了。