使用Springboot 查询es库

方式一:

1、pom文件依赖

 <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>6.8.15</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>6.8.15</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.9.0</version>
        </dependency>

2、application.yml 配置

#查询配置
snat-es-config:
  indexes: sq_*
  esIp: 127.0.0.1
  esPort: 9200
  username: admin
  password: admin

3、获取配置文件的config的信息

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
​
/**
 * @Description:  查询配置文件
 * @Author: liujian
 * @Version: 1.0
 * @Create Date Time: 2021-12-03 17:32
 * @Update Date Time: 2021-12-03 17:32
 * @see
 */
​
@Configuration
@Data
@ConfigurationProperties(prefix = "snat-es-config")
public class SnatConfig {
​
    /**
     * es库索引前缀
     */
    private String indexes;
​
    /**
     * esIP
     */
    private String esIp;
​
    /**
     * esPort
     */
    private int esPort;
    /**
     * userName
     */
    private String userName;
    /**
     * password
     */
    private String passWord;
​
}

4、构建Client

/**
     * 构建Client
     *
     * @return RestHighLevelClient client
     */
    public RestHighLevelClient getClient() {
        RestHighLevelClient client = null;
        String userName = snatConfig.getUserName();
        String userPwd = snatConfig.getPassWord();
        String ip = snatConfig.getEsIp();
        int port = snatConfig.getEsPort();
​
        try {
            /** 用户认证对象 */
            final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
            /** 设置账号密码 */
            credentialsProvider.setCredentials(AuthScope.ANY,
                    new UsernamePasswordCredentials(userName, userPwd));
            /** 创建rest client对象 */
            RestClientBuilder builder = RestClient.builder(new HttpHost(ip, port))
                    .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
                        @Override
                        public HttpAsyncClientBuilder customizeHttpClient(
                                HttpAsyncClientBuilder httpClientBuilder) {
                            return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
                        }
                    });
            client = new RestHighLevelClient(builder);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return client;
    }

5、实现查询业务

   @Test
    public void getSnatDataTest01() throws IOException {
​
​
       RestHighLevelClient client = getClient();
       // 根据索引创建查询请求
       SearchRequest searchRequest = new SearchRequest("sq_*");
​
       SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
​
       // 构建查询语句 可以写多个参数
       searchSourceBuilder.query(QueryBuilders.queryStringQuery("127.0.0.1"))
       .sort("timestamp", SortOrder.fromString("desc"));
       System.out.println("searchSourceBuilder =" + searchSourceBuilder);
       searchRequest.source(searchSourceBuilder);
       SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
       SearchHits hits = response.getHits();
        //将数据打印出来
       System.out.println(JSONObject.toJSON(hits));
    }

6、可能出现的异常

java.lang.NoSuchFieldError: IGNORE_DEPRECATIONS     说明你的pom依赖是 7版本的(依赖版本不对)

方式二:

前提:代码中存在通过HTTP请求的工具,可以直接通过API调用es库来获取数据

 @Test
    public void getSnatDataTest02() throws IOException {
​
        String sandforadBody = "{\n" +
                "  \"from\": 0,\n" +
                "  \"size\": 150,\n" +
                "  \"query\": {\n" +
                "    \"bool\": {\n" +
                "      \"must\": [\n" +
                "        {\n" +
                "          \"query_string\": {\n" +
                "            \"query\": \"10.42.141.32\",\n" +
                "            \"fields\": [],\n" +
                "            \"use_dis_max\": true,\n" +
                "            \"tie_breaker\": 0,\n" +
                "            \"default_operator\": \"or\",\n" +
                "            \"auto_generate_phrase_queries\": false,\n" +
                "            \"max_determinized_states\": 10000,\n" +
                "            \"allow_leading_wildcard\": true,\n" +
                "            \"enable_position_increments\": true,\n" +
                "            \"fuzziness\": \"AUTO\",\n" +
                "            \"fuzzy_prefix_length\": 0,\n" +
                "            \"fuzzy_max_expansions\": 50,\n" +
                "            \"phrase_slop\": 0,\n" +
                "            \"escape\": false,\n" +
                "            \"split_on_whitespace\": true,\n" +
                "            \"boost\": 1\n" +
                "          }\n" +
                "        }\n" +
                "      ],\n" +
                "      \"filter\": [\n" +
                "        {\n" +
                "          \"bool\": {\n" +
                "            \"must\": [\n" +
                "              {\n" +
                "                \"range\": {\n" +
                "                  \"timestamp\": {\n" +
                "                    \"from\": \"1970-01-01 00:00:00.000\",\n" +
                "                    \"to\": \"2022-04-27 08:36:36.120\",\n" +
                "                    \"include_lower\": true,\n" +
                "                    \"include_upper\": true,\n" +
                "                    \"boost\": 1\n" +
                "                  }\n" +
                "                }\n" +
                "              }\n" +
                "            ],\n" +
                "            \"should\": [\n" +
                "              {\n" +
                "                \"query_string\": {\n" +
                "                  \"query\": \"streams:5e8456c8df8b291d662c4638\",\n" +
                "                  \"fields\": [],\n" +
                "                  \"use_dis_max\": true,\n" +
                "                  \"tie_breaker\": 0,\n" +
                "                  \"default_operator\": \"or\",\n" +
                "                  \"auto_generate_phrase_queries\": false,\n" +
                "                  \"max_determinized_states\": 10000,\n" +
                "                  \"enable_position_increments\": true,\n" +
                "                  \"fuzziness\": \"AUTO\",\n" +
                "                  \"fuzzy_prefix_length\": 0,\n" +
                "                  \"fuzzy_max_expansions\": 50,\n" +
                "                  \"phrase_slop\": 0,\n" +
                "                  \"escape\": false,\n" +
                "                  \"split_on_whitespace\": true,\n" +
                "                  \"boost\": 1\n" +
                "                }\n" +
                "              }\n" +
                "            ],\n" +
                "            \"disable_coord\": false,\n" +
                "            \"adjust_pure_negative\": true,\n" +
                "            \"boost\": 1\n" +
                "          }\n" +
                "        }\n" +
                "      ],\n" +
                "      \"disable_coord\": false,\n" +
                "      \"adjust_pure_negative\": true,\n" +
                "      \"boost\": 1\n" +
                "    }\n" +
                "  },\n" +
                "  \"sort\": [\n" +
                "    {\n" +
                "      \"timestamp\": {\n" +
                "        \"order\": \"desc\"\n" +
                "      }\n" +
                "    }\n" +
                "  ],\n" +
                "  \"highlight\": {\n" +
                "    \"fragment_size\": 0,\n" +
                "    \"number_of_fragments\": 0,\n" +
                "    \"require_field_match\": false,\n" +
                "    \"fields\": {\n" +
                "      \"*\": {}\n" +
                "    }\n" +
                "  }\n" +
                "}";
        String url = "http://192.168.113.99:9200/sq_*/_search";
        //初始化
        HttpRequest sandforadHttpRequest = HttpRequestImpl.getInstance();
        HttpRequestBodyBuilder bodyBuilder = HttpRequestBodyBuilderImpl.getInstance();
        final RequestBody requestBody = bodyBuilder.json(sandforadBody);
        Response post = sandforadHttpRequest.post(url, requestBody);
        String stringPost = post.body().string();
        System.out.println(stringPost);
    }

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个非常流行的Java Web框架,而Elasticsearch则是一个开源的分布式搜索引擎。将它们结合起来可以实现强大的全文搜索功能。 下面是Spring Boot整合Elasticsearch的基本步骤: 1. 添加Elasticsearch依赖 在`pom.xml`文件中添加以下依赖: ``` <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>6.8.5</version> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>transport</artifactId> <version>6.8.5</version> </dependency> ``` 2. 配置Elasticsearch客户端 在`application.properties`文件中添加以下配置: ``` spring.data.elasticsearch.cluster-nodes=your-host:9300 ``` 其中`your-host`是Elasticsearch服务器地址。 3. 创建Elasticsearch实体 创建一个Java类,用于表示Elasticsearch中的一个文档。 ``` @Document(indexName = "example_index", type = "example_type") public class ExampleDocument { @Id private String id; private String title; private String content; // getter/setter方法 } ``` `@Document`注解表示该类映射到Elasticsearch中的一个文档,`@Id`注解表示该文档的唯一标识。 4. 创建Elasticsearch仓 创建一个Java接口,用于操作Elasticsearch中的文档。 ``` @Repository public interface ExampleRepository extends ElasticsearchRepository<ExampleDocument, String> { List<ExampleDocument> findByTitle(String title); } ``` `@Repository`注解表示该接口是一个Spring Data仓,`ElasticsearchRepository`是Spring Data提供的Elasticsearch仓接口,其中`ExampleDocument`表示该仓操作的文档类型,`String`表示文档的唯一标识类型。 5. 使用Elasticsearch仓 在业务代码中使用Elasticsearch仓操作Elasticsearch中的文档。 ``` @Autowired private ExampleRepository exampleRepository; public void search(String keyword) { List<ExampleDocument> documents = exampleRepository.findByTitle(keyword); // 处理搜索结果 } ``` 在以上代码中,使用`exampleRepository`实例调用`findByTitle`方法,可以根据标题关键字搜索文档。 以上就是Spring Boot整合Elasticsearch的基本步骤,当然还有更多高级用法,需要根据具体需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值