binary類型接收一個Base64編碼的字符串,默認(rèn)情況二進(jìn)制字段不能被存儲和檢索。
一、binary不能被存儲?
binary不能被存儲?
這個意思不是說沒有存儲在ES,而是說mapping中該字段的store參數(shù)默認(rèn)是false。
默認(rèn)情況下字段的值都會存儲到_source
里,binary
類型的值也是如此。
如果store
屬性設(shè)置為true,那就會在_source的同級外面單獨(dú)存下它原始值。
另外binary的doc_values
屬性也會默認(rèn)為false。
對mapping的參數(shù)還可以參考我之前的博客es mapping參數(shù)詳解
二、binary不能被檢索?
binary的值雖然也存儲到_source
里了,但是并沒有根據(jù)binary的值進(jìn)行倒排索引,所以不能根據(jù)binary的值來查詢文檔,一般我們也沒有場景來要用Base64亂碼來查詢文檔的。
三、驗證binary字段
創(chuàng)建一index,其mapping中name是text
類型,blob是binary
類型。
PUT pigg_test
{
"mappings": {
"properties": {
"name": {
"type": "text"
},
"blob": {
"type": "binary"
}
}
}
}
插入一個測試文檔
PUT pigg_test/_doc/1
{
"name": "Some binary blob",
"blob": "U29tZSBiaW5hcnkgYmxvYg=="
}
1 根據(jù)ID查詢文檔
GET pigg_test/_doc/1
結(jié)果顯示binary字段確實存儲到_source
中了
{
"_index" : "pigg_test",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"_seq_no" : 0,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "Some binary blob",
"blob" : "U29tZSBiaW5hcnkgYmxvYg=="
}
}
2 在binary字段上做檢索
GET pigg_test/_search
{
"query": {
"term": {
"blob": {
"value": "U29tZSBiaW5hcnkgYmxvYg=="
}
}
}
}
它會返回如下錯誤,說明binary字段不支持搜索文章來源:http://www.zghlxwxcb.cn/news/detail-448416.html
"reason" : "failed to create query: Binary fields do not support searching"
四、binary的使用場景
其實在ES中,能用到binary的場景很少,如果這二進(jìn)制的值大小比較大,存ES中,會對ES的查詢性能有很多的影響。之前有個項目把用戶的頭像信息轉(zhuǎn)成Base64編碼,然后存ES中,后來ES的查詢性能很差,最后才申請了單獨(dú)的文件服務(wù)器存放頭像圖片。ES雖然也算數(shù)據(jù)庫吧,但是它很擅長的是檢索信息,在大數(shù)據(jù)框架中,它可能會和HBase等數(shù)據(jù)庫結(jié)合,ES僅僅存一些查詢才用到的字段,僅僅負(fù)責(zé)檢索的功能,把存放海量數(shù)據(jù)的責(zé)任交給更加適合的數(shù)據(jù)庫。文章來源地址http://www.zghlxwxcb.cn/news/detail-448416.html
到了這里,關(guān)于【Elasticsearch教程6】Mapping字段類型之二進(jìn)制binary的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!