問題
引數是開始和結束的時間,根據兩個日期維度來篩選es的資料,發現日期超過3個月後報錯,報錯如下{ "error": { "root_cause": [ { "type": "too_long_frame_exception", "reason": "An HTTP line is larger than 4096 bytes." } ], "type": "too_long_frame_exception", "reason": "An HTTP line is larger than 4096 bytes." }, "status": 400 }
查詢的語句拼接如下,原來是根據天來拼接的多索引查詢(具體內容請忽略)
GET /index_v1_20190801,index_v1_20190802,index_v1_20190803,index_v1_20190804,index_v1_20190805,index_v1_20190806,index_v1_20190807,index_v1_20190808,index_v1_20190809,index_v1_20190810,index_v1_20190811,index_v1_20190812,index_v1_20190813,index_v1_20190814,index_v1_20190815,index_v1_20190816,index_v1_20190817,index_v1_20190818,index_v1_20190819,index_v1_20190820,index_v1_20190821,index_v1_20190822,index_v1_20190823,index_v1_20190824,index_v1_20190825,index_v1_20190826,index_v1_20190827,index_v1_20190828,index_v1_20190829,index_v1_20190830,index_v1_20190831,index_v1_20190901,index_v1_20190902,index_v1_20190903,index_v1_20190904,index_v1_20190905,index_v1_20190906,index_v1_20190907,index_v1_20190908,index_v1_20190909,index_v1_20190910,index_v1_20190911,index_v1_20190912,index_v1_20190913,index_v1_20190914,index_v1_20190915,index_v1_20190916,index_v1_20190917,index_v1_20190918,index_v1_20190919,index_v1_20190920,index_v1_20190921,index_v1_20190922,index_v1_20190923,index_v1_20190924,index_v1_20190925,index_v1_20190926,index_v1_20190927,index_v1_20190928,index_v1_20190929,index_v1_20190930,index_v1_20191001,index_v1_20191002,index_v1_20191003,index_v1_20191004,index_v1_20191005,index_v1_20191006,index_v1_20191007,index_v1_20191008,index_v1_20191009,index_v1_20191010,index_v1_20191011,index_v1_20191012,index_v1_20191013,index_v1_20191014,index_v1_20191015,index_v1_20191016,index_v1_20191017,index_v1_20191018,index_v1_20191019,index_v1_20191020,index_v1_20191021,index_v1_20191022,index_v1_20191023,index_v1_20191024,index_v1_20191025,index_v1_20191026,index_v1_20191027,index_v1_20191028,index_v1_20191029,index_v1_20191030,index_v1_20191031,index_v1_20191101,index_v1_20191102,index_v1_20191103,index_v1_20191104,index_v1_20191105,index_v1_20191106,index_v1_20191107,index_v1_20191108,index_v1_20191109,index_v1_20191110,index_v1_20191111,index_v1_20191112,index_v1_20191113,index_v1_20191114,index_v1_20191115,index_v1_20191116,index_v1_20191117,index_v1_20191118,index_v1_20191119,index_v1_20191120,index_v1_20191121,index_v1_20191122,index_v1_20191123,index_v1_20191124,index_v1_20191125,index_v1_20191126,index_v1_20191127,index_v1_20191128,index_v1_20191129,index_v1_20191130,index_v1_20191201,index_v1_20191202,index_v1_20191203,index_v1_20191204,index_v1_20191205,index_v1_20191206,index_v1_20191207,index_v1_20191208,index_v1_20191209,index_v1_20191210,index_v1_20191211,index_v1_20191212,index_v1_20191213,index_v1_20191214,index_v1_20191215,index_v1_20191216,index_v1_20191217,index_v1_20191218,index_v1_20191219,index_v1_20191220,index_v1_20191221,index_v1_20191222/_search
由於拼接的多索引過長導致錯誤,怎麼解決呢?
尋找解決方案
- 解決方案1,調節引數配置,但是正式版的es叢集不好重啟,方案pass
- 解決方案2,用別名的形式,請求前將長日期索引建立一個別名,然後用別名查詢,還有更好的方案嗎?
- 解決方案3,使用通配索引,如index_v1_201912*查詢整個12月的,index_v1_2019*查詢整個19年的,這個是比較好的方案,決定試一下。
具體實施
要實現的功能是,封裝一個函式,引數是開始時間和結束時間,返回值是對應的通配匹配,比如引數是20191130和20200101,則返回值應該是20191130,201912*,20190101
待更新
本作品採用《CC 協議》,轉載必須註明作者和本文連結