Elasticsearch实践(二)在Springboot微服务中集成搜索服务【面试+工作】Elasticsearch官方APIElasticsearch提供了多种api。可以直接使用官方提供的Java API进行使用。ElasticSearc Java API https://www./guide/en/elasticsearch/client/java-api/current/index.html 。如果是使用Spring框架的项目,还可以用spring-data-elasticsearch的api。基于spring可以使用Annotation,索引文档不需要任何xml式的配置。而且使用上非常简便。其存储、查询接口继承了JpaRepository,所以对于引入JPA的项目来说,上手非常快。 Springboot项目中使用spring-data-elasticsearch框架集成Springboot项目集成elasticsearch,可以使用spring-data-elasticsearch。官方链接: 其对于Elasticsearch的文档(@Document)的数据的操作就类似于JPA中对于数据库表(@Entity)的接口。可以用findByXX的方式进行查询,也可以自定义@Query()方式进行查询。在开发的过程中,对于一些特殊的查询场景,可以查询spring-data-elasticsearch源码中的示例,基本包含了各种场景的API,项目git:spring-data-elasticsearch Git https://github.com/spring-projects/spring-data-elasticsearch 使用spring-boot-starter-data-elasticsearch做启动时搜索服务的配置使用Springboot,可以在启动时对很多服务Bean进行注入。一下是通过Autowire方式,使用spring-boot-starter-data-elasticsearch:2.1.3.RELEASE来处理基于Springboot的微服务启动时连接Elasticsearch集群,以及注入应用代码需要使用的 ElasticsearchTemplate。Configuration类如下: 使用spring-data-elasticsearch基于注解的示例API创建索引和文档,同JPA的 @Entity,@Table,可以通过在搜索的文档实体类添加@Document注解的方式,在启动Springboot应用时会直接创建以及更新Elasticsearch的index以及document。 OrderDocumentDetailOrderDocument以上就在 “orders-test” 索引中创建了两个Document。@Id注解对应着Elasticsearch的id。可以系统自动生成,也可以创建文档数据时指定固定的id,但是一定要保证唯一性。 另,刚才代码中,通过设置@Document的参数 number_of_shards,number_of_replicas。可以看到创建文档的settings参数:”number_of_shards” : “10”, “number_of_replicas” : “2”。如果不指定参数,则默认分别是 number_of_shards=5,number_of_replicas=1。其他默认参数可以查看public @interface Document源码。 有特殊字符的自生成的id Repositories&ElasticsearchTemplate文档创建好之后,对于文档数据的索引可以继承spring-data-elasticsearch的ElasticsearchRepository。使用CurdRepository接口规范来完成基础的查询,存储,更新操作。如下简单举例了两个查询语句。 如果是比较复杂的查询场景,可以在Repository接口写@Query语句。也可以使用ElasticsearchTemplate来写更灵活的定制化查询: 其他注意事项
但parant-child 关系mapping的时候,删除之后,如果想重建索引,在启动springboot的时候会出现异常:
一旦索引创建完成,无法再变更name字段为not_analyzed。所以在一开始设计索引文档时需要谨慎判断。
可以通过以下命令修改索引index_name。这个是index级别的设置,但是不建议更改设置,会增加ES node的内存负担。 虽然可以解决索引数据量大的问题,但是接口的性能会有问题:基本上平均返回时间会+200-300ms。推荐用scroll api:
结果中还可以看到所有可用插件列表。可以用来检验分词插件等是否安装成功。
查询时也一样: 同理,新增的时候也需要指定routing |
|