Skip to content

Files

Latest commit

57e1067 · Dec 18, 2021

History

History

spring-boot-elasticsearch

readme.md

spring-boot-elasticsearch

elasticsearch有三种操作方式

系列文章

可能遇到的问题

  • Consider defining a bean of type 'UserService' in your configuration.

    出现这个问题是spring.data.elasticsearch.repositories.enabled属性需要设置为true

  • None of the configured nodes are available: [{#transport#-1}{-sq-D5sBSTCbdr1apbd9WA}{172.26.104.209}{172.26.104.209:9300}]

    • 出现这个问题需要验证下你spring.data.elasticsearch.cluster-name属性配置的是否跟你es配置的名称一致

    • 检查你的spring.data.elasticsearch.cluster-nodes端口是否配置正确9300而不是9200

    • es开启了xpack认证,账号密码不对或者没有设置

  • Caused by: java.lang.ClassNotFoundException: org.elasticsearch.action.admin.indices.mapping.put.PutMappingResponse

    出现这个问题是因为你选择的spring-boot-starter-data-elasticsearch版本没有对elasticsearch兼容,你找一个有PutMappingResponse的版本,我选择的是6.8.2

  • failed to load elasticsearch nodes : org.elasticsearch.index.mapper.MapperParsingException: analyzer [ik_smart] not found for field [name]

    出现这个问题说明你的elasticsearch没有安装ik插件,可以看我的elasticsearch-in-java

  • Constructor threw exception; nested exception is java.lang.IllegalArgumentException: Rejecting mapping update to [elastic] as the final mapping would have more than 1 type: [sunny, user]

    出现这个问题是以为你的索引elastic存在两个mapping,在elasticsearch-head删除索引重新开始

  • IllegalArgumentException[Parse failure at index [0] of [Sun Jul 07 06:41:39 UTC 2019]]

    出现这个问题主要是你设置了日期类型跟参数类型不对称导致,入参改为string即可,可以参考ArticleService#findArticlesByCreateTimeBetweenOrderByIdDesc是怎么处理的

  • 挂载容器内部目录到物理机上出现 [0.001s][error][logging] Error opening log file 'logs/gc.log': Permission denied

    这个是权限问题

    # 给目录775权限
    sudo chmod -R 775 /data/es/
    # 修改文件归属者
    sudo chown -R 1000:1000 /data/es/
  • java.lang.RuntimeException: can not run elasticsearch as root

    es禁止root用户直接运行,切换用户就可以了,不过用docker好像没有出现

  • max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

    jvm 内存不够需要修改系统jvm内存

     vim /etc/sysctl.conf
     # 追加配置
     vm.max_map_count=655300

    修改完后执行: sudo sysctl -p可以执行:more /proc/sys/vm/max_map_count验证下是否修改成功

  • failed to read [id:1, file:/usr/share/elasticsearch/data/nodes/0/_state/node-1.st]

    挂载的宿主目录文件加不是空导致,清空即可

  • java.lang.OutOfMemoryError: Java heap space (oom和gc等这里问题我电脑无法还原就弄这个oom说明问题吧)

    jvm内存设置的小了修改 ES_JAVA_OPTS参数即可

  • docker启动了但是不能正常访问或者只能本地访问,另外在用网段的电脑不能访问

    这个主要是docker网络模式的问题network_mode: host设置上就可以了,你也可以通过docker inspect 容器id 查看docker帮我们绑定的ip

  • java.lang.IllegalArgumentException: Fielddata is disabled on text fields by default. Set fielddata=true on [name] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead.

    这个问题是因为Sort的字段nametext类型的,按照官方fieldata的建议,它禁止这样操作,容易出现内存过大

    // fielddata = true 可以解决这个问题,但是可能带来oom问题
    @Field(type = FieldType.Text,fielddata = true,store = true, analyzer = "ik_smart", searchAnalyzer = "ik_max_word")
    private String name;