向量数据如何以文件形式导入Kibana-csv or jsonl?
为提高效率,很多向量库支持批量文件导入,常用文件有csv、jsonl。
那么在Kibana+ES场景,将包含向量的数据导入Kibana,选择csv还是选择jsonl?
这里尝试了csv、jsonl多种方式,最后发现jsonl更适合,更容易处理和控制。
1 csv文件
kibana支持csv文件。这里先用python生成csv,其中包括向量数据,然后尝试kibana导入。
1.1 csv.writer生成csv
python基于csv包,导出csv格式数据,包括以下步骤
1)初始化csv.writer;2)写入表头,如csv_writer.writerow(name);3)写入内容,如csv_writer.writerow(z);4)文件关闭。
示例程序如下所示。
import csv with open("file.csv", "a", encoding="utf-8", newline="") as f:csv_writer = csv.writer(f)#列表头name=['top','name']csv_writer.writerow(name)# 写入csv文件内容z = [[0, "one"],[1, "two"],[2, "three"]]csv_writer.writerow(z)f.close()
测试后发现,向量项分割符与csv分割符“,”冲突,导出csv文件解析异常。
1.2 pandas导出csv
采用成熟可靠DataFrame工具导出csv,比如pandas。
具体为:pandas将向量表示为DataFrame中一列,然后调用to_csv导出csv。
以下是示例代码。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df2 = pd.DataFrame({'A': 1,'B':pd.Timestamp('20170801'),'C':pd.Series(1,index=list(range(4)),dtype='float64'),'D':np.array([3]*4,dtype='int64'),'E':pd.Categorical(["test","train","test","train"]),'F':'fooo'
})
print(df2)
df2.to_csv('cases.csv', index=False)
测试发现,pandas可以正常导出合法的csv文件,但导入kibana报如下异常,看上去像编码问题。
Illegal character inside unquoted field at 13 {"message":" -0.01611782]\""}
2 jsonl文件
Kibana还支持jsonl文件导入,这里进一步尝试jsonl。
2.1 jsonl生成
jsonl是面向json的文件格式,要求每行一个完整json串,解析时每读一行json解析一次。
import json
with open("cases.jsonl", "w") as f:for data in data_list:d = {"id": data[0], "text": data[1], "vector": [float(v) for v in data[2]]}body = json.dumps(d, ensure_ascii=False)f.write(f"{body}\n")
2.2 jsonl 导入
在导入kibana时,kibana不能正确识别vector字段,可以通过调整字段定义解决。
具体为:按如下格式调整vector字段定义。
{
"mappings": {
"properties": {
"idx": {
"type": "text"
},
"vector": {
"type": "dense_vector",
"dims": 1024,
"index": true,
"similarity": "cosine",
"index_options": {
"type": "bbq_hnsw",
"m": 16,
"ef_construction": 100,
"rescore_vector": {
"oversample": 3
}
}
},
"text": {
"type": "text"
}
}
}
}
reference
---
使用 Python 读取并写入 CSV 文件
https://www.runoob.com/python3/python-csv-read-write.html
python 【模块】pandas数组处理详解
https://blog.csdn.net/xixihahalelehehe/article/details/106247323
Mac本地docker安装Kibana+ElasticSearch
https://blog.csdn.net/liliang199/article/details/151581138
云搜索服务 CSS-使用Elasticsearch实现向量检索:步骤四:导入向量数据
https://www.huaweicloud.com/guide/productsdesc-bms_31c80d2452b3d047c500258bd17e2521support4_y