在今天的文章里,我來介紹一下 ES|QL 里的元數(shù)據(jù)字段以及多值字段。我們可以利用這些元數(shù)據(jù)字段以及多值字段來針對我們的查詢進行定制。這里例子的數(shù)據(jù)集,請參考文章 “Elasticsearch:ES|QL 快速入門”。
ES|QL 源數(shù)據(jù)字段
ES|QL 可以訪問元數(shù)據(jù)字段。 目前支持的有:
- _index:文檔所屬的索引名稱。 該字段的類型為關(guān)鍵字。
- _id:源文檔的 ID。 該字段的類型為關(guān)鍵字。
- _version:源文檔的版本。 該字段的類型為 long。
要啟用對這些字段的訪問,需要為 FROM source 命令提供專用指令:
FROM index [METADATA _index, _id]
僅當(dāng)數(shù)據(jù)源是索引時元數(shù)據(jù)字段才可用。 因此,F(xiàn)ROM 是唯一支持 METADATA 指令的源命令。比如,
POST _query?format=txt
{
"query": """
FROM sample_data [METADATA _index, _id]
| LIMIT 3
"""
}
從上面的返回數(shù)據(jù)中,我們可以看到 _index 及 _id 返回索引名稱 sample_data 及文檔的 ID。
POST _query?format=txt
{
"query": """
FROM sample_data [METADATA _index, _id, _version]
| LIMIT 3
| WHERE _version == 1
| EVAL key = CONCAT(_index, "_", _id)
| KEEP _index, _version, _id, key
"""
}
此外,與索引字段類似,一旦執(zhí)行聚合,后續(xù)命令將無法再訪問元數(shù)據(jù)字段,除非用作分組字段:
POST _query?format=txt
{
"query": """
FROM sample_data [METADATA _index, _id]
| STATS max= MAX(event.duration) BY _index
"""
}
ES|QL 多值字段
ES|QL 可以很好地讀取多值字段。多值字段也就是在一個字段里有多個值。通常是以數(shù)組的形式出現(xiàn)。
POST /mv/_bulk?refresh
{"index":{}}
{"a":1,"b":[2,1]}
{"index":{}}
{"a":2,"b":3}
多值字段以 txt 數(shù)組的形式返回:
POST /_query?format=txt
{
"query": "FROM mv | LIMIT 2"
}
多值字段中值的相對順序未定義。 它們通常會按升序排列,但不要依賴于此。
重復(fù)值
某些字段類型(例如關(guān)鍵字)在寫入時刪除重復(fù)值:
DELETE mv
PUT /mv
{
"mappings": {
"properties": {
"b": {"type": "keyword"}
}
}
}
POST /mv/_bulk?refresh
{"index":{}}
{"a":1,"b":["foo","foo","bar"]}
{"index":{}}
{"a":2,"b":["bar","bar"]}
POST /_query?format=txt
{
"query": "FROM mv | LIMIT 2"
}
在 ES|QL 查詢結(jié)果里,我們看到了該刪除。
但其他類型(例如 long)不會刪除重復(fù)項。
DELETE mv
PUT /mv
{
"mappings": {
"properties": {
"b": {"type": "long"}
}
}
}
POST /mv/_bulk?refresh
{"index":{}}
{"a":1,"b":[2,2,1]}
{"index":{}}
{"a":2,"b":[1,1]}
POST /_query?format=txt
{
"query": "FROM mv | LIMIT 2"
}
這都是在存儲層。 如果你存儲重復(fù)的 “l(fā)ong”,然后將它們轉(zhuǎn)換為字符串,則重復(fù)項將保留:
DELETE mv
PUT /mv
{
"mappings": {
"properties": {
"b": {"type": "long"}
}
}
}
POST /mv/_bulk?refresh
{"index":{}}
{"a":1,"b":[2,2,1]}
{"index":{}}
{"a":2,"b":[1,1]}
POST /_query?format=txt
{
"query": "FROM mv | EVAL b=TO_STRING(b) | LIMIT 2"
}
函數(shù)
除非另有說明,函數(shù)在應(yīng)用于多值字段時將返回 null。 此行為可能會在更高版本中改變。
DELETE mv
POST /mv/_bulk?refresh
{"index":{}}
{"a":1,"b":[2,1]}
{"index":{}}
{"a":2,"b":3}
POST /_query?format=txt
{
"query": "FROM mv | EVAL b + 2, a + b | LIMIT 4"
}
通過使用以下之一將字段轉(zhuǎn)換為單個值來解決此限制:文章來源:http://www.zghlxwxcb.cn/news/detail-757004.html
- MV_AVG
- MV_CONCAT
- MV_COUNT
- MV_MAX
- MV_MEDIAN
- MV_MIN
- MV_SUM
POST /_query?format=txt
{
"query": "FROM mv | EVAL b=MV_MIN(b) | EVAL b + 2, a + b | LIMIT 4"
}
文章來源地址http://www.zghlxwxcb.cn/news/detail-757004.html
到了這里,關(guān)于Elasticsearch:ES|QL 查詢中的元數(shù)據(jù)字段及多值字段的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!