在Docker构建过程中定义elasticsearch映射

问题描述 投票:1回答:1

我有一个MySQL,Logstash和ES设置程序,但我需要将某些字段设置为关键字类型而不是文本。我读过,不可能在Logstash(logstash.conf)中执行此操作,因此需要在ES中完成。我遵循了类似的问题here,并将其稍加修改以放入映射,但出现此错误:"stacktrace": ["org.elasticsearch.bootstrap.StartupException: java.lang.IllegalArgumentException: unknown setting [es.path.data] please check that any required plugins are installed, or check the breaking changes documentation for removed settings",

我正在使用docker-compose在同一网络下一次启动所有服务,因此必须在logstash将数据移植到ES之前指定映射。 (无法更改非空索引的映射)。

我看过其他问题,它们似乎有点老了,所以我想问一下现在是否有更好的方法可以做到这一点。

我的mapping.json

{
    "mappings": {
        "properties": {
            "authors": {"type": "keyword"},
            "tags": {"type": "keyword"}
        }
    }
}

Dockerfile

FROM elasticsearch:7.5.1

COPY ./docker-entrypoint.sh .

COPY ./mapping.json .

RUN mkdir /data && chown -R elasticsearch:elasticsearch /data && echo 'es.path.data: /data' >> config/elasticsearch.yml && echo 'path.data: /data' >> config/elasticsearch.yml

ADD https://raw.githubusercontent.com/vishnubob/wait-for-it/e1f115e4ca285c3c24e847c4dd4be955e0ed51c2/wait-for-it.sh /utils/wait-for-it.sh

# Copy the files you may need and your insert script

RUN ./docker-entrypoint.sh elasticsearch -p /tmp/epid & /bin/bash /utils/wait-for-it.sh -t 0 localhost:9200 -- curl -X PUT 'http://localhost:9200/cnas_publications' -d @./mapping.json; kill $(cat /tmp/epid) && wait $(cat /tmp/epid); exit 0;

编辑:我使用了官方仓库here中的docker-entrypoint.sh >>

我有一个MySQL,Logstash和ES设置程序,但我需要将某些字段设置为关键字类型而不是文本。我读过在Logstash(logstash.conf)中无法执行此操作,因此它必须是...

docker elasticsearch
1个回答
0
投票

似乎我弄错了,实际上可以在Logstash中定义映射。假设您使用的是官方Elasticsearch映像,请创建一个ES模板,并使用它创建一个卷到logstash容器。

© www.soinside.com 2019 - 2024. All rights reserved.