springboot 集成 elasticsearch6.5.3(demo)


elasticsearch集成springboot的时候各种版本要对应,不然各种报错很麻烦。

1.开发环境:

elasticsearch 6.5.3  端口2001  3001   单机部署

spring-boot 2.2.8 及  2.2.2

9200 用于外部通讯,基于http协议,程序与es的通信使用9200端口
9300 jar之间就是通过tcp协议通信,遵循tcp协议,es集群中的节点之间也通过9300端口进行通信。

 2.pom文件  

spring-data-elasticsearch版本不用指定,官网上提供的有操作手册可查看 
6.5.3
     <dependency>
            <groupId>org.elasticsearchgroupId>
            <artifactId>elasticsearchartifactId>
            <version>${elasticsearch.version}version>
        dependency>
        <dependency>
            <groupId>org.springframework.datagroupId>
            <artifactId>spring-data-elasticsearchartifactId>
        dependency>        

3.yml文件配置

string:
  data:
    elasticsearch:
      cluster-nodes: 192.168.*.*:9301
      cluster-name: elasticsearch-6.5.3
      repositories:
        enabled: true
  elasticsearch:
    rest:
      uris: 192.168.*.*:9201

4.Model文件 elasticsearch7.0之前使用springboot-data集成需要指定字段的数据类型,7.0之后不用指定类型

@Document(indexName = "hljygl",type = "elate",shards = 1,replicas = 0, refreshInterval = "-1")
@Data
//indexName 库名 type 表名
public class Elasticsearch implements Serializable { @Id private String id; @Field(type = FieldType.Text) private String tabName; @Field(type = FieldType.Text) private String content; }

kibana视图:

5.Dao层  使用的spring-data-elasticsearch 提供的模板接口,已经提供了一系列的接口,可以满足基本需求

@Component
public interface EsDao extends ElasticsearchRepository {
    List queryByContentLike(String content);
}

6.Controller层调用

@CrossOrigin
@RestController
@Api(value = "搜索管理",tags = "搜索管理")
@RequestMapping(value = "/hljygl/search")
public class SearchController {
    @Autowired
    private EsDao service;
    @ApiOperation("save")
    @PostMapping("/save")
    public void save(@RequestParam String id){
        Elasticsearch elasticsearch = new Elasticsearch();
        elasticsearch.setId(id);
        elasticsearch.setContent("111");
        elasticsearch.setTabName("11111");
        service.save(elasticsearch);
    }
    @ApiOperation("query")
    @PostMapping("/query")
    public ResponseWrapper query(@RequestParam String content){
        List elasticises =service.queryByContentLike(content);
        return  new ResponseWrapper.Builder<>().success(elasticises);
    }
}

已经测试通过

@Document(indexName = "hljygl",type = "elate",shards = 1,replicas = 0, refreshInterval = "-1")
@Data
public class Elasticsearch implements Serializable {
@Id
private String id;
@Field(type = FieldType.Text)
private String tabName;
@Field(type = FieldType.Text)
private String content;
}