适配多es版本代码案例

本文详细介绍了如何使用BBoss框架在SpringBoot应用中实现对多个Elasticsearch版本的兼容,包括配置、API调用和版本间差异的处理,为实际项目提供灵活的搜索引擎支持。
@SpringBootTest
class DemoApplicationTests {

    @Resource
    @Qualifier("bbossESStarterDefault")
    private BBossESStarter bbossESStarterDefault;

    @Resource
    @Qualifier("bbossESStarterEs680")
    private BBossESStarter bbossESStarterEs680;

    @Test
    void contextLoads() {
        /**
          * @time: 2022/6/1 11:08
          * @Param: 非spring boot环境 和 spring boot环境
          * @Param:  Elasticsearch 6.3及以上版本新增的SQL功能
          * @Description: RestClientUtil example
          */
        // 1. 默认:sql接口写法   6-5-×   5-x
        /*ClientInterface es511Client = bbossESStarterEs680.getRestClient("elasticsearch 5.1.1");
        SQLRestResponse es511Response = es511Client.executeHttp("/_xpack/sql",
                "{\"query\": \" SELECT * FROM log-2022.03.01 where @timestamp between 1646099070047 and 1646099070063 \"}",
                ClientInterface.HTTP_POST,
                new SQLRestResponseHandler());
        System.out.println(es511Response);

        ClientInterface es680Client = bbossESStarterEs680.getRestClient("elasticsearch 6.8.0");
        SQLRestResponse es680Response = es680Client.executeHttp("/_xpack/sql",
                "{\"query\": \" SELECT * FROM alert where generate_time between 1651852800000 and 1651939199000 \"}",
                ClientInterface.HTTP_POST,
                new SQLRestResponseHandler());
        System.out.println(es680Response);


        // 2. 默认:sql函数写法  6-5-×   5-x
        ClientInterface es511Client = bbossESStarterEs680.getRestClient("elasticsearch 5.1.1");
        List<Map> es511result = es511Client.sql(Map.class, "{\"query\":\"SELECT * FROM log-2022.03.01 where @timestamp between 1646099070047 and 1646099070063 \"}");
        System.out.println("默认sql函数写法----511---> " + es511result.size());

        ClientInterface es680Client = bbossESStarterEs680.getRestClient("elasticsearch 6.8.0");
        List<Map> es680result = es680Client.sql(Map.class, "{\"query\":\"SELECT * FROM alert where generate_time between 1651852800000 and 1651939199000 \"}");
        System.out.println("默认sql函数写法----680---> " + es680result.size());


        // 3. SQL插件 sql函数写法   6-集群有问题待尝试 5-√   5-x (No handler found for uri)
        ClientInterface es680Client = bbossESStarterEs680.getRestClient("elasticsearch 6.8.0");
        ESDatas<Map> es680Datas = es680Client.searchList("/_sql",
                "SELECT * FROM alert limit 0,10",
                Map.class);
        //获取结果对象列表
        List<Map> es680demos = es680Datas.getDatas();
        System.out.println("SQL插件sql函数写法----680---> " + es680demos.size());

        ClientInterface es511Client = bbossESStarterEs680.getRestClient("elasticsearch 5.1.1");
        ESDatas<Map> es511Datas = es511Client.searchList("/_sql",
                "SELECT * FROM log-2022.03.01 limit 0,10",
                Map.class);
        //获取结果对象列表
        List<Map> es511demos = es511Datas.getDatas();
        System.out.println("SQL插件sql函数写法----511---> " + es511demos.size());


        // 4. SQL插件 sql转dsl写法   6-集群有问题待尝试 5-√   5-×
        ClientInterface es680Client = bbossESStarterEs680.getRestClient("elasticsearch 6.8.0");
        String transformDsl680 = es680Client.executeHttp("/_sql/_explain",
                "SELECT * FROM alert where generate_time between 1651852800000 and 1651939199000",
                ClientInterface.HTTP_POST
        );
        ESDatas<Map> ES680Datas = es680Client.searchList("alert/_search", transformDsl680, Map.class);
        System.out.println("sql转dsl写法----680---> " + ES680Datas.getDatas().size());

        ClientInterface es511Client = bbossESStarterEs680.getRestClient("elasticsearch 5.1.1");
        String transformDsl511 = es511Client.executeHttp("/_sql/_explain",
                "SELECT * FROM log-2022.03.01 where @timestamp between 1646099070047 and 1646099070063",
                ClientInterface.HTTP_POST
        );
        ESDatas<Map> ES511Datas = es511Client.searchList("webids-webattack_dolog-2022.03.01/_search", transformDsl511, Map.class);
        System.out.println("sql转dsl写法----511---> " + ES511Datas.getDatas().size());


        // 5. 默认:sql转dsl写法   6-5-×   5-x
        ClientInterface es511Client = bbossESStarterEs680.getRestClient("elasticsearch 5.1.1");
        String transformDsl511 = es511Client.executeHttp("/_xpack/sql/translate",
                "{\"query\": \"SELECT * FROM log-2022.03.01 where @timestamp between 1646099070047 and 1646099070063 \",\"fetch_size\": 5}",
                ClientInterface.HTTP_POST
        );
        System.out.println(transformDsl511);

        ClientInterface es680Client = bbossESStarterEs680.getRestClient("elasticsearch 6.8.0");
        String transformDsl680 = es680Client.executeHttp("/_xpack/sql/translate",
                "{\"query\": \" SELECT * FROM alert where generate_time between 1651852800000 and 1651939199000 \",\"fetch_size\": 5}",
                ClientInterface.HTTP_POST
        );
        System.out.println(transformDsl680);


        // 6. dsl语句写法   6-5-√
        ClientInterface es680Client = bbossESStarterEs680.getRestClient("elasticsearch 6.8.0");
        String dsl680 = "{\"size\":10000,\"timeout\":\"600s\",\"query\":{\"range\":{\"generate_time\":{\"from\":1651852800000,\"to\":1651939199000,\"include_lower\":true,\"include_upper\":true,\"boost\":1.0}}},\"sort\":[{\"generate_time\":{\"order\":\"asc\"}}]}";
        ESDatas<Map> ES680Datas = es680Client.searchList("alert/_search", dsl680, Map.class);
        System.out.println("dsl680----37---> " + ES680Datas.getDatas().size());

        ClientInterface es511Client = bbossESStarterEs680.getRestClient("elasticsearch 5.1.1");
        String dsl511 = "{\"size\":10000,\"timeout\":\"600s\",\"query\":{\"range\":{\"@timestamp\":{\"from\":1646099070047,\"to\":1646099070063,\"include_lower\":true,\"include_upper\":true,\"boost\":1.0}}},\"sort\":[{\"@timestamp\":{\"order\":\"asc\"}}]}";
        ESDatas<Map> ES511Datas = es511Client.searchList("log-2022.03.01/_search", dsl511, Map.class);
        System.out.println("dsl511----28---> " + ES511Datas.getDatas().size());*/
        
        
        /**
          * @time: 2022/6/1 11:08
          * @Param: 非spring boot环境 和 spring boot环境
          * @Param: Elasticsearch 6.3及以上版本新增的SQL功能
          * @Description: ConfigRestClientUtil example
          */
        // 7. xml-dsl写法   6-5-√
        /*ClientInterface client = bbossESStarterDefault.getConfigRestClient("esmapper/test.xml");
        ESDatas<Map> es511Datas = client.searchList("log-2022.03.01/_search",
                "511xmlDslQuery", Map.class);
        System.out.println("xml-dsl写法----1---> " + es511Datas.getDatas().size());*/

        ClientInterface client = bbossESStarterEs680.getConfigRestClient("esmapper/test.xml");
        ESDatas<Map> es680Datas = client.searchList("alert/_search",
                "680xmlDslQuery", Map.class);
        System.out.println("xml-dsl写法----1---> " + es680Datas.getDatas().size());

    }

}
xml文件示例

<properties>

    <property name="511xmlDslQuery">
        <![CDATA[
            {
              "from" : 0,
              "size" : 10000,
              "query" : {
                "bool" : {
                  "filter" : [
                    {
                      "bool" : {
                        "must" : [
                          {
                            "range" : {
                              "@timestamp" : {
                                "from" : 1646099070047,
                                "to" : 1646099070063,
                                "include_lower" : true,
                                "include_upper" : true,
                                "boost" : 1.0
                              }
                            }
                          }
                        ],
                        "disable_coord" : false,
                        "adjust_pure_negative" : true,
                        "boost" : 1.0
                      }
                    }
                  ],
                  "disable_coord" : false,
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              },
              "ext" : { }
            }
        ]]>
    </property>

    <property name="680xmlDslQuery">
        <![CDATA[
            {
              "from" : 0,
              "size" : 10000,
              "query" : {
                "bool" : {
                  "filter" : [
                    {
                      "bool" : {
                        "must" : [
                          {
                            "range" : {
                              "generate_time" : {
                                "from" : 1651852800000,
                                "to" : 1651939199000,
                                "include_lower" : true,
                                "include_upper" : true,
                                "boost" : 1.0
                              }
                            }
                          }
                        ],
                        "disable_coord" : false,
                        "adjust_pure_negative" : true,
                        "boost" : 1.0
                      }
                    }
                  ],
                  "disable_coord" : false,
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              },
              "ext" : { }
            }
        ]]>
    </property>

</properties>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值