springboot整合ElasticSearch

    1. RestClient依赖,此为java的客户端,从来交互elasticsearch

      <dependency>
          <groupId>org.elasticsearch.client</groupId>
          <artifactId>elasticsearch-rest-high-level-client</artifactId>
      </dependency>
    2. 因为SpringBoot默认的ES版本是7.17.10,所以我们需要覆盖默认的ES版本:

        <properties>
           <maven.compiler.source>11</maven.compiler.source>
            <maven.compiler.target>11</maven.compiler.target>
            <elasticsearch.version>7.12.1</elasticsearch.version>
        </properties>
    3. application

      es:
        host: 192.168.43.135
        port: 9200
    4. EsProperties

      @Data
      @Configuration
      @ConfigurationProperties(prefix = "es")
      public class EsProperties {
          private String host;
          private Integer port;
      }
    5. EsConfig

      @Configuration
      public class EsConfig {
          @Autowired
          private EsProperties esProperties;
          @Bean
          public RestHighLevelClient restHighLevelClient() {
              return new RestHighLevelClient(RestClient.builder(new HttpHost(esProperties.getHost()
                      , esProperties.getPort())));
          }
      }
    6. 创建数据库对应的索引库

      查看代码
       PUT /hotel
      {
        "mappings": {
          "properties": {
            "id": {
              "type": "keyword"
            },
            "name":{
              "type": "text",
              "analyzer": "ik_max_word",
              "copy_to": "all"
            },
            "address":{
              "type": "keyword",
              "index": false
            },
            "price":{
              "type": "integer"
            },
            "score":{
              "type": "integer"
            },
            "brand":{
              "type": "keyword",
              "copy_to": "all"
            },
            "city":{
              "type": "keyword",
              "copy_to": "all"
            },
            "starName":{
              "type": "keyword"
            },
            "business":{
              "type": "keyword"
            },
            "location":{
              "type": "geo_point"
            },
            "pic":{
              "type": "keyword",
              "index": false
            },
            "all":{
              "type": "text",
              "analyzer": "ik_max_word"
            },
              "isAD":{
              "type": "boolean"
            }
          }
        }
      }

       

    7. 批量从数据库把数据导入到elasticsearch中

      @SpringBootTest
      class HotelDemoApplicationTests {
      @Autowired
      private HotelService hotelService;
      @Autowired
      private RestHighLevelClient client;
          @Test
          void contextLoads() throws IOException {
              List<Hotel> list = hotelService.list();
              BulkRequest bulkRequest = new BulkRequest();
              List<HotelDoc> hotelDocs = BeanUtil.copyToList(list, HotelDoc.class);
              for (HotelDoc hotelDoc : hotelDocs) {
                  bulkRequest.add(new IndexRequest("hotel")
                          .id(hotelDoc.getId().toString())
                          .source(JSONUtil.toJsonStr(hotelDoc), XContentType.JSON)
                  );
              }
              client.bulk(bulkRequest, RequestOptions.DEFAULT);
          }
      }
    8. 写controller……service
posted @ 2024-07-06 22:24  冷风5997  阅读(95)  评论(0)    收藏  举报