Elasticsearch 6.2 запускает http-узел localhost в модульном тесте

Моя цель - запустить узел localhost elasticsearch в моем тесте junit, чтобы я мог индексировать некоторые документы, а также тестировать поисковые запросы через клиент отдыха высокого уровня (например, делая http-вызовы на узел localhost ES). Я использую Elasticsearch 6.2.

Вот код, который я пробовал

    String clusterName = "test";
    Settings settings = Settings.builder()
            .put("path.home", ES_WORKING_DIR)
            .build();
    new Node(settings).start();

и это сообщение об ошибке, которое я получил ..

java.lang.IllegalStateException: Unsupported transport.type []

at __randomizedtesting.SeedInfo.seed([74752622FDACDD5:AB9FD863FD5A2A5F]:0)
at org.elasticsearch.common.network.NetworkModule.getTransportSupplier(NetworkModule.java:212)
at org.elasticsearch.node.Node.<init>(Node.java:427)
at org.elasticsearch.node.Node.<init>(Node.java:246)
at org.elasticsearch.node.Node.<init>(Node.java:242)

В принципе, я не уверен, какие параметры установить в настройках.

Заранее спасибо.


person Edward Wang    schedule 24.05.2018    source источник
comment
Библиотека embedded-elasticsearch позволяет легко запустить узел Elasticsearch в отдельном процессе.   -  person Chin Huang    schedule 24.05.2018
comment
Вы можете попробовать докер   -  person Edward Wang    schedule 05.03.2019
comment
См. также stackoverflow.com/questions/41263143/   -  person dr0i    schedule 24.04.2020


Ответы (1)


Они больше не поддерживаются эластичностью, но работают для целей тестирования Junit.

у меня есть следующее

Для 5.6.7

Settings.Builder nodeSettings = Settings.builder()
            .put("cluster.name", "my-integration-test")
            .put("http.enabled", "true")
            .put("path.data", dataDirectory)
            .put("path.home", "/")
            .put("transport.type", "netty4")
            .put("network.host", "_local_")
            .put("transport.tcp.port", "19200-19400")
            .put("http.port", "19200-19400")
            .put("discovery.type", "single-node");

    LOG.info("Starting up embedded Elasticsearch");
    node = new LocalNode(nodeSettings.build(), Arrays.asList(Netty4Plugin.class,
            ReindexPlugin.class));
    node.start();

Для эластика 6.8.3

        Settings.Builder nodeSettings = Settings.builder()
            .put("cluster.name", "integration-test")
            .put("node.name", "node-test")
            .put("path.data", dataDirectory)
            .put("path.home", "/")
            .put("transport.type", "netty4")
            .put("network.host", "127.0.0.1")
            .put("http.port", "19200");

    LOG.info("Starting up embedded Elasticsearch");
    node = new LocalNode(nodeSettings.build(), Arrays.asList(Netty4Plugin.class,
            ReindexPlugin.class,
            CommonAnalysisPlugin.class));

        node.start();

куда

private static class LocalNode extends Node {

    LocalNode(Settings settings, Collection<Class<? extends Plugin>> classpathPlugins) {
        super(new Environment(settings, null), classpathPlugins, true);
    }

    @Override
    protected void registerDerivedNodeNameWithLogger(final String s) {}

}

Для 6.8.x вам понадобится

    <dependency>
        <groupId>org.codelibs.elasticsearch.module</groupId>
        <artifactId>analysis-common</artifactId>
        <version>6.8.2</version>
    </dependency>
person Kalpesh Soni    schedule 14.12.2018
comment
Что такое LocalNode? Это не похоже на тип elasticsearch. - person Brian Olsen; 09.09.2019
comment
Это inner class расширение Node. См. также stackoverflow.com/questions/41263143/. - person dr0i; 24.04.2020