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){ Listelasticises =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;
}