ElasticSearch中二进制blob的高效存储

kyks70gy  于 2023-02-03  发布在  ElasticSearch
关注(0)|答案(2)|浏览(449)

(请注意,我知道Elasticsearch不是存储二进制blob的最佳选择,但请耐心等待:))
Elasticsearch支持使用binary数据类型存储二进制数据。客户端发送一个base64编码的字符串来表示二进制值。
假设我想在Elasticsearch中高效地存储二进制值,为此,我可以从Map中的_source中排除二进制字段,这样base64值就不会保存在JSON中的磁盘上。
然后我可以在二进制字段上设置store: true,以便以后能够获取它,但我的问题是:
Elasticsearch是否将binary数据(当storetrue时)存储为base64字符串,或者在存储之前是否对数据进行解码?

jtw3ybtb

jtw3ybtb1#

Base64值解码为byte[],以便存储到doc_values或field中

ztigrdn8

ztigrdn82#

如果使用JSON将数据发送到ES,则必须对二进制数据进行base64编码。如果字段的类型为"binary",则base64传输值将解码为二进制并存储为二进制。
顺便说一句:如果您计划存储较大的blob,则应考虑使用CBOR或SMILE。这两种格式都允许您避免对二进制数据进行base64编码。ES理解"Content-Type:应用程序/cbor "和"内容类型:响应的格式可以通过将"Accept:"请求报头设置为"application/json"、"application/cbor"或"application/smile"来以类似的方式控制。
示例:

curl ES_URL -u 'user:password' -X GET -H 'Accept: application/smile' | xxd

相关问题