zoukankan      html  css  js  c++  java
  • springBoot配置elasticsearch搜索

    1、本地安装elasticsearch服务,具体过程见上一篇文章(安装和配置elasticsearch服务集群)

    2、修改项目中pom文件,引入搜索相关jar包

    <!-- elasticsearch相关jar包开始 -->
    	<dependency>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    	</dependency>
         <!-- 链接数据库用的jar包 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!-- elasticsearch相关jar包结束 -->

    2、在application.yml文件中添加elasticsearch配置信息

    spring: 
      #elasticsearch配置
    data:
    elasticsearch: #ElasticsearchProperties
    cluster-name: elastic #默认为elasticsearh
    cluster-nodes: 192.168.97.88:9300,192.168.97.88:9301 #配置es节点信息,逗号分隔,如果没有指定,则启动ClientNode

      

    3、编写elasticsearch操作的相关类

      (1)、获取elasticsearch客户端

    //获取elasticsearch客户端
    String hostName = "192.168.97.88" ; //本地elasticsearch的yml配置文件中写的IP地址
    Integer port = 9200 ; //远程链接的端口号为9200
    RestClient restClient = RestClient.builder(new HttpHost(hostName, port)).build();
    /*
    //如果想要获取阿里云上的elasticsearch客户端,代码如下
    final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
    credentialsProvider.setCredentials(AuthScope.ANY,new UsernamePasswordCredentials("阿里云elasticsearch用户名", "阿里云elasticsearch密码"));
    RestClient restClient = RestClient.builder(new HttpHost("阿里云elasticsearch的ip", 9200))
                           .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
                              @Override
                              public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
                                  return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
                              }
                          }).setMaxRetryTimeoutMillis(5 * 60 * 1000)  //设置超时时间
                       .build();
    */
    

      

      (2)、查看索引是否存在 (索引必须为全小写)

    //查看 demoIndex 索引是否存在
    Response isExist = restClient.performRequest("HEAD","/demoindex" , Collections.<String, String>emptyMap());
    System.out.println(isExist.getStatusLine().getStatusCode());
    

      (3)、索引不存在,创建索引

    //查看 demoIndex 索引是否存在
    Response isExist = restClient.performRequest("HEAD","/demoindex" , Collections.<String, String>emptyMap());
    int status = isExist.getStatusLine().getStatusCode();
    if( status == 404){
        //不存在索引,创建索引
        String method = "PUT";
        String endpoint = "demoindex";
        Response response = restClient.performRequest(method, "/" + endpoint);
        System.out.println(EntityUtils.toString(response.getEntity()));
    }
    

      (4)、索引已经创建存在,我们接下来进行索引的  增删改查  操作

           ①、新增索引数据

    //手动拼写一个符合要求的json串   json串的格式为:{"field1":"value1","field2":"value2"}
    String json = "{" +
         ""user":"kimchy"," +
         ""postDate":"2013-01-30"," +
         ""message":"trying out Elasticsearch"" +
         "}";
    HttpEntity entity = new NStringEntity(json, ContentType.APPLICATION_JSON);
    //发送一个请求,将json转换的实体发送到es,并常见索引,索引主键id=1
    Response indexResponse = restClient.performRequest(
           "PUT",
           "/" + "demoindex" + "/" + "demoindex" + "/1",
           Collections.<String, String>emptyMap(),
           entity);
    //获取结果中的实体,查看是否新增成功
    System.out.println(EntityUtils.toString(indexResponse.getEntity()));
    

      得到如下结果图,表示成功

      

           ②、批量新增索引数据 ( bulk )

    //批量添加索引数据
    //手动拼写一个符合要求的json串
    // json串的格式为:
    // { "index" : { "_id" : "1" }}   //这里为手动赋值id,也可以{ "index" : { }}为es自动设置id   id相同时后添加的数据会覆盖之前添加的数据
    // {"field1":"value1","field2":"value2"}
    // { "index" : { "_id" : "2" }}
    // {"field1":"value1","field2":"value2"}
    String json = "{ "index" : { "_id" : "1" }} 
    " +
            "{" +
            ""user":"kimchy1"," +
            ""postDate":"2013-01-30"," +
            ""message":"trying out Elasticsearch1"" +
            "} 
    ";  //一定要加换行
    json += "{ "index" : { "_id" : "2" }} 
    " +
            "{" +
            ""user":"kimchy2"," +
            ""postDate":"2014-01-30"," +
            ""message":"trying out Elasticsearch2"" +
            "}";
    //将字符串转换成http实体
    HttpEntity entity = new NStringEntity(json,ContentType.APPLICATION_JSON);
    //发送请求,并的到处理结果
    Response response = restClient.performRequest("POST","/demoindex/demoindex/_bulk",Collections.singletonMap("pretty","true"),entity);
    //获取结果中的实体,查看是否新增成功
    System.out.println(EntityUtils.toString(response.getEntity()));
    

      得到如下结果图,则表示批量插入成功;若红框裱起来的位置为update表示修改成功

      

           ③、修改单个索引时去执行插入单个索引,将主键id设置为需要更改的索引id即可

           ④、删除指定索引

    //删除指定id索引
    Response deleteResponse = restClient.performRequest(
            "DELETE",
            "/demoindex/demoindex/3", //删除id为 3 的索引
            Collections.<String, String>emptyMap());
    System.out.println(EntityUtils.toString(deleteResponse.getEntity()));
    

      得到如下结果,表示删除成功

      ⑤、根据属性来删除对应索引

    //根据属性值来删除索引
    //删除user="kimchy2"的索引
    String queryString = "{
    " +
            "  "query": {
    " +
            ""match_phrase":  {"user": "kimchy2"}
    " +
            "}
    " +
            "}
    ";
    HttpEntity entity = new NStringEntity(queryString, ContentType.APPLICATION_JSON);
    Response deleteResponse = restClient.performRequest(
            "POST",
            "/demoindex/demoindex/_delete_by_query",
            Collections.<String, String>emptyMap(),entity);
    System.out.println((EntityUtils.toString(deleteResponse.getEntity())));
    

      得到如下结果图表示删除成功

      ⑥、删除所有索引数据

    //删除所有索引数据
    String queryString = "";
    queryString = "{
    " +
            "  "query": {
    " +
            ""match_all":  {}
    " +
            "}
    " +
            "}
    ";
    HttpEntity entity = new NStringEntity(queryString, ContentType.APPLICATION_JSON);
    Response deleteResponse = restClient.performRequest(
            "POST",
            "/demoindex/demoindex/_delete_by_query",
            Collections.<String, String>emptyMap(),entity);
    System.out.println(EntityUtils.toString(deleteResponse.getEntity()));

      ⑦、搜索索引中的数据

    //查询索引数据
    String queryStr = "{ 
    " +
                          ""query" : { 
    " +
                               ""match_phrase": { "user": { "query" : "kimchy1", "boost" :"5" }}}
    " +
                          "}
    " +
                      "}";
    HttpEntity entity = new NStringEntity(queryStr, ContentType.APPLICATION_JSON);
    Response response = restClient.performRequest("GET", "/demoindex/demoindex/" + "_search",Collections.singletonMap("pretty", "true"),entity);
    System.out.println(EntityUtils.toString(response.getEntity()));

      得到查询结果

        有关更多查询匹配方式请看下一篇文章

  • 相关阅读:
    最佳调度问题_分支限界法
    运动员最佳配对问题
    最小重量机器设计问题
    实现银行家算法和先进先出算法_对文件读写数据
    n皇后问题_回溯法
    0-1背包_回溯法
    根据前序、中序、后序遍历还原二叉树
    矩阵连乘问题_动态规划
    最长公共子序列_动态规划
    最优二叉查找树_动态规划
  • 原文地址:https://www.cnblogs.com/lazycxy/p/9467792.html
Copyright © 2011-2022 走看看