22.7. Filter 过滤

		
FilterBuilder filterBuilder = FilterBuilders.andFilter(  
	FilterBuilders.existsFilter("title").filterName("exist"),  
	FilterBuilders.termFilter("title", "elastic")  
);  

SearchResponse response = client.prepareSearch("netkiller")  
	.setPostFilter(filterBuilder)  
	.get();  
		
		

22.7.1. term

			
.setPostFilter(QueryBuilders.termQuery("site_id", siteId))
			
			

22.7.2. range

			
QueryBuilders.rangeQuery("age").from(12).to(18)
			
			




原文出处:Netkiller 系列 手札
本文作者:陈景峯
转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

现在我们有了执行计划,你分析一下哪慢:QUERY PLAN Limit (cost=9550.97..9800.70 rows=1 width=38) (actual time=9795.278..9795.400 rows=1 loops=1) -> Nested Loop (cost=9550.97..9800.70 rows=1 width=38) (actual time=9795.275..9795.396 rows=1 loops=1) Join Filter: (((pm.original_store_code)::text = (pm_1.original_store_code)::text) AND ((ym.group_number)::text = (ym_1.group_number)::text) AND ((ym.host_cycle_code)::text = (ym_1.host_cycle_code)::text) AND ((ym.store_cycle_code)::text = (ym_1.store_cycle_code)::text)) -> Group (cost=4704.81..4841.78 rows=1 width=29) (actual time=3247.129..3247.199 rows=1 loops=1) Group Key: pm.original_store_code, ym.group_number, jtm.staff_code, ym.host_cycle_code, ym.store_cycle_code -> Gather Merge (cost=4704.81..4841.77 rows=1 width=29) (actual time=3247.128..3247.196 rows=1 loops=1) Workers Planned: 1 Workers Launched: 1 -> Incremental Sort (cost=3704.80..3841.65 rows=2 width=29) (actual time=1623.114..1623.117 rows=1 loops=2) Sort Key: pm.original_store_code, ym.group_number, jtm.staff_code, ym.host_cycle_code, ym.store_cycle_code Presorted Key: pm.original_store_code Full-sort Groups: 1 Sort Method: quicksort Average Memory: 30kB Peak Memory: 30kB Pre-sorted Groups: 1 Sort Method: quicksort Average Memory: 45kB Peak Memory: 45kB Worker 0: Full-sort Groups: 1 Sort Method: quicksort Average Memory: 25kB Peak Memory: 25kB -> Nested Loop (cost=3568.02..3841.56 rows=1 width=29) (actual time=1622.343..1622.884 rows=131 loops=2) -> Merge Left Join (cost=3567.74..3628.53 rows=522 width=21) (actual time=1621.903..1622.179 rows=228 loops=2) Merge Cond: (((pm.original_store_code)::text = (ymk.original_store_code)::text) AND ((ym.host_cycle_code)::text = (ymk.host_cycle_code)::text) AND ((ym.store_cycle_code)::text = (ymk.store_cycle_code)::text) AND ((ym.information_category_code)::text = (ymk.information_category_code)::text)) Filter: ((((ymk.group_number)::text !~~ '0%'::text) AND ('2023-11-09'::date >= ymk.apply_start_date) AND ('2023-11-09'::date <= ymk.apply_end_date)) OR (ymk.information_category_code IS NULL)) -> Sort (cost=3541.22..3552.58 rows=4542 width=21) (actual time=1621.878..1622.115 rows=228 loops=2) Sort Key: pm.original_store_code, ym.host_cycle_code, ym.store_cycle_code, ym.information_category_code Sort Method: external merge Disk: 13800kB Worker 0: Sort Method: quicksort Memory: 25kB -> Merge Join (cost=3008.64..3265.32 rows=4542 width=21) (actual time=29.380..351.880 rows=226995 loops=2) Merge Cond: (((ym.pattern_type)::text = (pm.pattern_type)::text) AND ((ym.pattern_code)::text = (pm.pattern_code)::text)) -> Sort (cost=2045.25..2090.67 rows=18168 width=21) (actual time=26.306..27.871 rows=15434 loops=2) Sort Key: ym.pattern_type, ym.pattern_code Sort Method: quicksort Memory: 3181kB Worker 0: Sort Method: quicksort Memory: 25kB -> Parallel Seq Scan on m_reading_number_by_pattern_1109_036 ym (cost=0.00..759.94 rows=18168 width=21) (actual time=0.018..5.019 rows=15443 loops=2) Filter: (('2023-11-09'::date >= apply_start_date) AND ('2023-11-09'::date <= apply_end_date) AND ((version)::text = '1109_036'::text)) -> Sort (cost=963.39..988.39 rows=10000 width=14) (actual time=6.142..27.592 rows=455991 loops=1) Sort Key: pm.pattern_type, pm.pattern_code Sort Method: quicksort Memory: 853kB -> Seq Scan on m_pattern_10010001 pm (cost=0.00..299.00 rows=10000 width=14) (actual time=0.034..2.930 rows=10000 loops=1) Filter: (('2023-11-09'::date >= apply_start_date) AND ('2023-11-09'::date <= apply_end_date) AND ((version)::text = '10010001'::text)) -> Sort (cost=26.52..27.32 rows=320 width=102) (actual time=0.041..0.042 rows=1 loops=1) Sort Key: ymk.original_store_code, ymk.host_cycle_code, ymk.store_cycle_code, ymk.information_category_code Sort Method: quicksort Memory: 25kB -> Seq Scan on m_reading_number_by_store ymk (cost=0.00..13.20 rows=320 width=102) (actual time=0.025..0.025 rows=1 loops=1) -> Index Only Scan using m_staff_by_information_order_pkey on m_staff_by_information_order jtm (cost=0.29..0.40 rows=1 width=29) (actual time=0.003..0.003 rows=1 loops=455) Index Cond: ((original_store_code = (pm.original_store_code)::text) AND (host_cycle_code = (ym.host_cycle_code)::text) AND (store_cycle_code = (ym.store_cycle_code)::text) AND (information_category_code = (ym.information_category_code)::text)) Heap Fetches: 0 -> Group (cost=4846.16..4958.88 rows=1 width=29) (actual time=6548.141..6548.193 rows=1 loops=1) Group Key: pm_1.original_store_code, ym_1.group_number, ym_1.host_cycle_code, ym_1.store_cycle_code, ym_1.information_category_code, jtm_1.setting_date -> Incremental Sort (cost=4846.16..4958.85 rows=2 width=29) (actual time=6548.139..6548.191 rows=1 loops=1) Sort Key: pm_1.original_store_code, ym_1.group_number, ym_1.host_cycle_code, ym_1.store_cycle_code, ym_1.information_category_code, jtm_1.setting_date Presorted Key: pm_1.original_store_code, ym_1.group_number Full-sort Groups: 1 Sort Method: quicksort Average Memory: 30kB Peak Memory: 30kB Pre-sorted Groups: 1 Sort Method: quicksort Average Memory: 32kB Peak Memory: 32kB -> Nested Loop Left Join (cost=4733.53..4958.76 rows=1 width=29) (actual time=6546.392..6547.850 rows=97 loops=1) Filter: ((((ymk_1.group_number)::text !~~ '0%'::text) AND ('2023-11-09'::date >= ymk_1.apply_start_date) AND ('2023-11-09'::date <= ymk_1.apply_end_date)) OR (ymk_1.information_category_code IS NULL)) -> Nested Loop (cost=4733.38..4958.55 rows=1 width=29) (actual time=6546.377..6547.735 rows=97 loops=1) -> Group (cost=4732.69..4897.53 rows=1 width=23) (actual time=6546.292..6546.369 rows=24 loops=1) Group Key: pm_2.original_store_code, ym_2.group_number, jtm_1.setting_date, jtm_1.host_cycle_code, jtm_1.store_cycle_code -> Gather Merge (cost=4732.69..4897.52 rows=1 width=23) (actual time=6546.290..6546.349 rows=64 loops=1) Workers Planned: 1 Workers Launched: 1 -> Incremental Sort (cost=3732.68..3897.40 rows=2 width=23) (actual time=3271.945..3271.949 rows=32 loops=2) Sort Key: pm_2.original_store_code, ym_2.group_number, jtm_1.setting_date, jtm_1.host_cycle_code, jtm_1.store_cycle_code Presorted Key: pm_2.original_store_code Full-sort Groups: 1 Sort Method: quicksort Average Memory: 30kB Peak Memory: 30kB Pre-sorted Groups: 1 Sort Method: quicksort Average Memory: 45kB Peak Memory: 45kB Worker 0: Full-sort Groups: 1 Sort Method: quicksort Average Memory: 25kB Peak Memory: 25kB -> Nested Loop (cost=3568.02..3897.31 rows=1 width=23) (actual time=3271.191..3271.688 rows=131 loops=2) -> Merge Left Join (cost=3567.74..3628.53 rows=522 width=21) (actual time=3270.971..3271.034 rows=228 loops=2) Merge Cond: (((pm_2.original_store_code)::text = (ymk_2.original_store_code)::text) AND ((ym_2.host_cycle_code)::text = (ymk_2.host_cycle_code)::text) AND ((ym_2.store_cycle_code)::text = (ymk_2.store_cycle_code)::text) AND ((ym_2.information_category_code)::text = (ymk_2.information_category_code)::text)) Filter: ((((ymk_2.group_number)::text !~~ '0%'::text) AND ('2023-11-09'::date >= ymk_2.apply_start_date) AND ('2023-11-09'::date <= ymk_2.apply_end_date)) OR (ymk_2.information_category_code IS NULL)) -> Sort (cost=3541.22..3552.58 rows=4542 width=21) (actual time=3270.944..3270.968 rows=228 loops=2) Sort Key: pm_2.original_store_code, ym_2.host_cycle_code, ym_2.store_cycle_code, ym_2.information_category_code Sort Method: external sort Disk: 15584kB Worker 0: Sort Method: quicksort Memory: 25kB -> Merge Join (cost=3008.64..3265.32 rows=4542 width=21) (actual time=118.146..277.069 rows=226995 loops=2) Merge Cond: (((ym_2.pattern_type)::text = (pm_2.pattern_type)::text) AND ((ym_2.pattern_code)::text = (pm_2.pattern_code)::text)) -> Sort (cost=2045.25..2090.67 rows=18168 width=21) (actual time=115.483..212.185 rows=15434 loops=2) Sort Key: ym_2.pattern_type, ym_2.pattern_code Sort Method: quicksort Memory: 3181kB Worker 0: Sort Method: quicksort Memory: 25kB -> Parallel Seq Scan on m_reading_number_by_pattern_1109_036 ym_2 (cost=0.00..759.94 rows=18168 width=21) (actual time=0.004..3.696 rows=15443 loops=2) Filter: (('2023-11-09'::date >= apply_start_date) AND ('2023-11-09'::date <= apply_end_date) AND ((version)::text = '1109_036'::text)) -> Sort (cost=963.39..988.39 rows=10000 width=14) (actual time=5.316..32.792 rows=455991 loops=1) Sort Key: pm_2.pattern_type, pm_2.pattern_code Sort Method: quicksort Memory: 853kB -> Seq Scan on m_pattern_10010001 pm_2 (cost=0.00..299.00 rows=10000 width=14) (actual time=0.027..2.123 rows=10000 loops=1) Filter: (('2023-11-09'::date >= apply_start_date) AND ('2023-11-09'::date <= apply_end_date) AND ((version)::text = '10010001'::text)) -> Sort (cost=26.52..27.32 rows=320 width=102) (actual time=0.045..0.046 rows=1 loops=1) Sort Key: ymk_2.original_store_code, ymk_2.host_cycle_code, ymk_2.store_cycle_code, ymk_2.information_category_code Sort Method: quicksort Memory: 25kB -> Seq Scan on m_reading_number_by_store ymk_2 (cost=0.00..13.20 rows=320 width=102) (actual time=0.024..0.025 rows=1 loops=1) -> Index Scan using m_staff_by_information_order_pkey on m_staff_by_information_order jtm_1 (cost=0.29..0.50 rows=1 width=24) (actual time=0.002..0.002 rows=1 loops=455) Index Cond: (((original_store_code)::text = (pm_2.original_store_code)::text) AND ((host_cycle_code)::text = (ym_2.host_cycle_code)::text) AND ((store_cycle_code)::text = (ym_2.store_cycle_code)::text) AND ((information_category_code)::text = (ym_2.information_category_code)::text)) -> Nested Loop (cost=0.70..60.96 rows=5 width=21) (actual time=0.034..0.056 rows=4 loops=24) -> Index Scan using m_pattern_10010001_pkey on m_pattern_10010001 pm_1 (cost=0.29..15.41 rows=5 width=14) (actual time=0.004..0.005 rows=5 loops=24) Index Cond: (((version)::text = '10010001'::text) AND ((original_store_code)::text = (pm_2.original_store_code)::text) AND (apply_start_date <= '2023-11-09'::date)) Filter: ('2023-11-09'::date <= apply_end_date) -> Index Scan using m_reading_number_by_pattern_1109_036_pkey on m_reading_number_by_pattern_1109_036 ym_1 (cost=0.41..9.10 rows=1 width=21) (actual time=0.009..0.010 rows=1 loops=116) Index Cond: (((pattern_type)::text = (pm_1.pattern_type)::text) AND ((pattern_code)::text = (pm_1.pattern_code)::text) AND (apply_start_date <= '2023-11-09'::date) AND ((host_cycle_code)::text = (jtm_1.host_cycle_code)::text) AND ((store_cycle_code)::text = (jtm_1.store_cycle_code)::text) AND ((group_number)::text = (ym_2.group_number)::text) AND ((version)::text = '1109_036'::text)) Filter: ('2023-11-09'::date <= apply_end_date) -> Index Scan using m_reading_number_by_store_pkey on m_reading_number_by_store ymk_1 (cost=0.15..0.19 rows=1 width=102) (actual time=0.001..0.001 rows=0 loops=97) Index Cond: (((original_store_code)::text = (pm_1.original_store_code)::text) AND ((host_cycle_code)::text = (ym_1.host_cycle_code)::text) AND ((store_cycle_code)::text = (ym_1.store_cycle_code)::text) AND ((information_category_code)::text = (ym_1.information_category_code)::text)) Planning Time: 6.857 ms Execution Time: 9981.633 ms SQL:-- explain(analyze,buffers,verbose) EXPLAIN ANALYZE WITH wk1 AS ( SELECT pm.original_store_code, ym.group_number, jtm.staff_code, ym.host_cycle_code, ym.store_cycle_code FROM m_pattern AS pm INNER JOIN m_reading_number_by_pattern AS ym ON pm.pattern_type = ym.pattern_type AND pm.pattern_code = ym.pattern_code AND ym.version = '1109_036' INNER JOIN m_staff_by_information_order AS jtm ON pm.original_store_code = jtm.original_store_code AND ym.host_cycle_code = jtm.host_cycle_code AND ym.store_cycle_code = jtm.store_cycle_code AND ym.information_category_code = jtm.information_category_code LEFT JOIN m_reading_number_by_store AS ymk ON pm.original_store_code = ymk.original_store_code AND ym.host_cycle_code = ymk.host_cycle_code AND ym.store_cycle_code = ymk.store_cycle_code AND ym.information_category_code = ymk.information_category_code WHERE pm.version = '10010001' AND (( ymk.group_number NOT LIKE '0%' AND '2023-11-09 03:00:00' BETWEEN ymk.apply_start_date AND ymk.apply_end_date ) OR ymk.information_category_code IS NULL ) AND '2023-11-09 03:00:00' BETWEEN pm.apply_start_date AND pm.apply_end_date AND '2023-11-09 03:00:00' BETWEEN ym.apply_start_date AND ym.apply_end_date GROUP BY pm.original_store_code, ym.group_number, jtm.staff_code, ym.host_cycle_code, ym.store_cycle_code ), WK2 AS ( SELECT pm.original_store_code, ym.group_number, jtm.setting_date, jtm.host_cycle_code, jtm.store_cycle_code FROM m_pattern AS pm INNER JOIN m_reading_number_by_pattern AS ym ON pm.pattern_type = ym.pattern_type AND pm.pattern_code = ym.pattern_code AND ym.version = '1109_036' INNER JOIN m_staff_by_information_order AS jtm ON pm.original_store_code = jtm.original_store_code AND ym.host_cycle_code = jtm.host_cycle_code AND ym.store_cycle_code = jtm.store_cycle_code AND ym.information_category_code = jtm.information_category_code LEFT JOIN m_reading_number_by_store AS ymk ON pm.original_store_code = ymk.original_store_code AND ym.host_cycle_code = ymk.host_cycle_code AND ym.store_cycle_code = ymk.store_cycle_code AND ym.information_category_code = ymk.information_category_code WHERE pm.version = '10010001' AND (( ymk.group_number NOT LIKE '0%' AND '2023-11-09 03:00:00' BETWEEN ymk.apply_start_date AND ymk.apply_end_date ) OR ymk.information_category_code IS NULL ) AND '2023-11-09 03:00:00' BETWEEN pm.apply_start_date AND pm.apply_end_date AND '2023-11-09 03:00:00' BETWEEN ym.apply_start_date AND ym.apply_end_date GROUP BY pm.original_store_code, ym.group_number, jtm.setting_date, jtm.host_cycle_code, jtm.store_cycle_code ), wk3 AS ( SELECT pm.original_store_code, ym.group_number, ym.host_cycle_code, ym.store_cycle_code, ym.information_category_code, wk2.setting_date FROM m_pattern AS pm INNER JOIN m_reading_number_by_pattern AS ym ON pm.pattern_type = ym.pattern_type AND pm.pattern_code = ym.pattern_code AND ym.version = '1109_036' INNER JOIN wk2 ON pm.original_store_code = wk2.original_store_code AND ym.group_number = wk2.group_number AND ym.host_cycle_code = wk2.host_cycle_code AND ym.store_cycle_code = wk2.store_cycle_code LEFT JOIN m_reading_number_by_store AS ymk ON pm.original_store_code = ymk.original_store_code AND ym.host_cycle_code = ymk.host_cycle_code AND ym.store_cycle_code = ymk.store_cycle_code AND ym.information_category_code = ymk.information_category_code WHERE pm.version = '10010001' AND (( ymk.group_number NOT LIKE '0%' AND '2023-11-09 03:00:00' BETWEEN ymk.apply_start_date AND ymk.apply_end_date ) OR ymk.information_category_code IS NULL ) AND '2023-11-09 03:00:00' BETWEEN pm.apply_start_date AND pm.apply_end_date AND '2023-11-09 03:00:00' BETWEEN ym.apply_start_date AND ym.apply_end_date GROUP BY pm.original_store_code, ym.group_number, ym.host_cycle_code, ym.store_cycle_code, ym.information_category_code, wk2.setting_date ) SELECT wk1.original_store_code, wk3.host_cycle_code, wk3.store_cycle_code, wk3.information_category_code, wk1.staff_code, wk3.setting_date FROM wk1 INNER JOIN wk3 ON wk1.original_store_code = wk3.original_store_code AND wk1.group_number = wk3.group_number AND wk1.host_cycle_code = wk3.host_cycle_code AND wk1.store_cycle_code = wk3.store_cycle_code limit 1 ;
08-19
``` {—————————————— 优化后系统参数 ——————————————} {——动态估值体系——} IND_PETTM:=FINANCE(33)/FINANCE(1); DYNPETTM_NORM:=CLOSE/(IND_PETTM*0.7 + MA(IND_PETTM,240)*0.3); PB_RATE:=CLOSE/MAX(FINANCE(5),0.000000001); {修正点} PEG_VAL:=DYNPETTM_NORM/MAX((FINANCE(54)/MA(FINANCE(34),3))*100,0.000000001); {修正点} {——智能波动率——} VOL_BAND:=EMA(STD(CLOSE,IF(VOL>MA(VOL,20)*2,10,30)),20); ADAPTIVE_VOL:=STD(CLOSE,20)/MA(CLOSE,20)*0.6 + VOL_BAND*0.4; VAR_PERIOD:=FLOOR(60-200*ADAPTIVE_VOL); MACD_PERIOD:=CEILING(60 - 40*ADAPTIVE_VOL); {——情绪引擎——} MF_RATIO:=SUM(IF(CLOSE>DYNAINFO(11),VOL,-VOL),5)/MA(VOL,5); HOT_INDEX_NEW:=EMA(MF_RATIO*0.5 + (AMOUNT/INDEXAMOUNT)*0.5,3); MONEY_FLOW:=EMA((AMOUNT-REF(AMOUNT,1))/REF(AMOUNT,1),3); SENTI_ACCEL:=MF_RATIO*HOT_INDEX_NEW/(1+ABS(MONEY_FLOW)); {——多周期共振——} MONTH_EMA_PERIOD:=IF(SLOPE(INDEXC,60)>0,360,480); MONTH_MA_NEW:=EMA(CLOSE,MONTH_EMA_PERIOD); MONTH_TREND:=CLOSE>MONTH_MA_NEW*1.02 AND SLOPE(MONTH_MA_NEW,5)>0; WEEK_DIF:=EMA(CLOSE,MACD_PERIOD)-EMA(CLOSE,MACD_PERIOD*2.2); WEEK_DEA:=EMA(WEEK_DIF,MACD_PERIOD*0.618); WEEK_MACD:=2*(WEEK_DIF-WEEK_DEA); WEEK_VOL:=EMA(V,5)>EMA(V,21)*1.2 AND V>REF(MA(V,5),1)*1.4; DAY_BREAK:=CLOSE>HHV(REF(HHV(HIGH,20),1),3) AND V>MA(V,20)*1.5; RSI6:=SMA(MAX(C-REF(C,1),0),6,1)/SMA(ABS(C-REF(C,1)),6,1)*100; DAY_RSI:=RSI6>65 AND RSI6<85; MIN60_BREAK:='CLOSE#MIN60'>'HHV(HIGH,15)#MIN60' AND 'VOL#MIN60'>'MA(VOL,20)#MIN60'*1.8; {——信号合成——} IND_CAPITAL:=EMA(SUM(AMOUNT,5)/FINANCE(1),3); INDUSTRY_RANK:=RANK(IND_CAPITAL)*0.6 + RANK(C/REF(C,20)/(INDEXC/REF(INDEXC,20)))*0.4; VOL_FILTER:=ADAPTIVE_VOL BETWEEN 0.15 AND 0.85; DEBT_FILTER:=FINANCE(42)/FINANCE(1)<0.45; CASH_FLOW:=FINANCE(25)/FINANCE(1)>0.25; FINAL_SIGNAL:MONTH_TREND AND INDUSTRY_RANK>0.75 AND WEEK_MACD>REF(WEEK_MACD,1) AND WEEK_VOL AND DAY_BREAK AND DAY_RSI AND MIN60_BREAK AND DEBT_FILTER AND CASH_FLOW AND PEG_VAL<0.75 AND DYNPETTM_NORM<22 AND SENTI_ACCEL>1.5 AND HOT_INDEX_NEW>1.2 AND MONEY_FLOW>0.12 AND VOL_FILTER;```你的身份是高级编程技术专家,精通各类编程语言,能对编程过程中的各类问题进行分析和解答。我的问题是【我编辑通达信选股代码,你如何深度理解此代码能否选到资金持续流入,股票市场情绪启动,盘中异动启动主升浪的股票,及日线盘中预警选股和盘后选股。用2018-2024年全A股周期回测验证此代码选股逻辑的准确性和胜率,评估月胜率达到多少?评估有效信号准确率达到多少?,同时此代码还有什么可提升的空间,提出可行性的优化建议和方案,学习动态优化参数,增强行业轮动因子,结合市场情绪指标,去除冗余选股条件,月胜率提高至80%以上,有效信号准确率95%以上,优化选股逻辑和所有参数计算关系和信号触发条件。修正后要求选股胜率达到月胜率提高至80%以上,有效信号准确率95%以上,选到资金持续流入,股票市场情绪启动,盘中异动启动主升浪的股票,及日线盘中预警选股和盘后选股。请帮我检查并全正确代码,生成优化后完整代码。
03-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值