使用 Elasticsearch 7.*,嘗試對索引“com-prod”執行 SQL 查詢:
GET /com-prod/_search
{
"script_fields": {
"test1": {
"script": {
"lang": "painless",
"source": "params._source.ElapsedTime"
}
}
}
}
它成功地將輸出和以下內容作為命中之一:
"hits" : [
{
"_index" : "com-prod",
"_type" : "_doc",
"_id" : "abcd",
"_score" : 1.0,
"fields" : {
"test1" : [
"29958"
]
}
}
現在,我正在嘗試將 ElapsedTime 增加 2,如下所示:
GET /com-prod/_search
{
"script_fields": {
"test2": {
"script": {
"lang": "painless",
"source": "params._source.ElapsedTime 2"
}
}
}
}
但它實際上將數字 2 添加到輸出中,如下所示:
"hits" : [
{
"_index" : "com-prod",
"_type" : "_doc",
"_id" : "abcd",
"_score" : 1.0,
"fields" : {
"test2" : [
"299582"
]
}
}
請指導這里可能出了什么問題,以及如何獲得輸出為 29960。
uj5u.com熱心網友回復:
您得到的是299582,而不是29960,因為該ElapsedTime欄位是字串型別 ("29958"),因此當您2在此使用腳本中添加時,2會在末尾附加(類似于連接兩個字串)。
所以,為了解決這個問題,你可以:
創建一個新索引,更新型別
ElaspsedTIme欄位的映射int,然后重新索引資料。然后,您可以使用上述問題中給出的相同搜索查詢。將 轉換
string為int型別值,使用Integer.parseInt()
GET /com-prod/_search
{
"script_fields": {
"test2": {
"script": {
"lang": "painless",
"source": "Integer.parseInt(params._source.ElapsedTime) 2"
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/456489.html
上一篇:KibanaDSL或查詢
