spring elasticsearch坑

2019年1月22日 作者 kee

spring elasticsearch坑

  1. 高版本的elasticSearch(6.5.1)一定要用高版本的客户端
    • 例如:springboot版本2.1.1.RELEASE
  2. 高版本的elasticSearch(6.5.1)不支持type了
    • 用logstash-jdbc-input导入数据时需要指定类型为doc
    document_type => "doc"
    
  3. 注意spring连接elasticSearch时,需要指定集群名称
    • 默认是:elasticsearch
    • docker容器启动的是:docker-cluster
    • spring配置如下:
    spring.data.elasticsearch.repositories.enabled = true
    spring.data.elasticsearch.cluster-name=docker-cluster
    spring.data.elasticsearch.cluster-nodes = 192.168.8.169:9300
    
    • 实体index配置如下:
    @Document(indexName = "orde_order", type = "doc")
    
  4. findById等方法查询后属性值有的是null。原因是通过logstash-jdbc-input把数据同步到elasticSearch后,是根据数据库的字段来的
    • 实体上需要添加注解,将属性驼峰式改为下划线的方式;与elasticSearch数据匹配
    @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
    
    • 如果属性和数据库的字段没有明确的转换关系,需要注意,例如:
    @Column(name = "logistic_supply_item_id", length = 50)
    private String supplyItemId; // 物流商id
    
  5. spring-boot-starter-data-elasticsearch查询list默认返回10条数据;
    • 如果要返回所有需要用以下方法:
    Page<Order> findByAppraisement(String appraiisement, Pageable page);
    
    • elasticSearch默认最多返回10000条数据,需要修改
    在kibana中的Dev Tools中执行以下命令,把所有index的最大返回都改掉
    PUT _all/_settings
    {
      "index.max_result_window" : "10000000"
    }
    
    Rest接口方式:
    curl -XPUT http://192.168.8.169:9200/_all/_settings  -H "Content-Type: application/json" -d '{"max_result_window":"10000000"}'