elasticsearch,Java,elasticsearch" /> elasticsearch,Java,elasticsearch" />

如何启动嵌入java应用程序的elasticsearch 5.1?

如何启动嵌入java应用程序的elasticsearch 5.1?,java,elasticsearch,Java,elasticsearch,对于elasticsearch 2.x,我使用以下代码启动嵌入式节点进行测试: @Bean public Node elasticSearchTestNode() { return NodeBuilder.nodeBuilder() .settings(Settings.settingsBuilder() .put("http.enabled", "true") .put("path.

对于elasticsearch 2.x,我使用以下代码启动嵌入式节点进行测试:

@Bean
public Node elasticSearchTestNode() {
    return NodeBuilder.nodeBuilder()
            .settings(Settings.settingsBuilder()
                    .put("http.enabled", "true")
                    .put("path.home", "elasticsearch-data")
                    .build())
            .node();
}

这不再编译了。如何在5.x中启动嵌入式节点?

它不受支持

你应该读书

编辑:


这就是我解决问题的方法

官方不再支持嵌入elasticsearch,它比2.x中的要复杂一些,但它可以工作

您需要添加一些依赖项:

    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>5.1.1</version>
        <scope>test</scope>
    </dependency>
    <dependency><!-- required by elasticsearch -->
        <groupId>org.elasticsearch.plugin</groupId>
        <artifactId>transport-netty4-client</artifactId>
        <version>5.1.1</version>
        <scope>test</scope>
    </dependency>
    <dependency><!-- required by elasticsearch -->
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.7</version>
    </dependency>

org.elasticsearch
弹性搜索
5.1.1
测试
org.elasticsearch.plugin
传输网络4客户端
5.1.1
测试
org.apache.logging.log4j
log4japi
2.7
然后启动如下节点:

@Bean
public Node elasticSearchTestNode() throws NodeValidationException {
    Node node = new MyNode(
            Settings.builder()
                    .put("transport.type", "netty4")
                    .put("http.type", "netty4")
                    .put("http.enabled", "true")
                    .put("path.home", "elasticsearch-data")
                    .build(),
            asList(Netty4Plugin.class));
    node.start();
    return node;
}

private static class MyNode extends Node {
    public MyNode(Settings preparedSettings, Collection<Class<? extends Plugin>> classpathPlugins) {
        super(InternalSettingsPreparer.prepareEnvironment(preparedSettings, null), classpathPlugins);
    }
}
@Bean
公共节点elasticSearchTestNode()引发NodeValidationException{
Node=newmynode(
Settings.builder()
.put(“运输类型”、“净额4”)
.put(“http.type”、“netty4”)
.put(“http.enabled”、“true”)
.put(“path.home”、“elasticsearch数据”)
.build(),
asList(Netty4Plugin.class));
node.start();
返回节点;
}
私有静态类MyNode扩展了Node{

public MyNode(Settings preparedSettings,Collection使ES5工作的最简单方法是使用(文章中有更多信息)。经过一天的努力,我发现在jar级别嵌入ES5非常容易。在pom中包括:

<dependency>
    <groupId>pl.allegro.tech</groupId>
    <artifactId>embedded-elasticsearch</artifactId>
    <version>2.5.0</version>
    <scope>test</scope>
</dependency>
测试将自动下载Elastic并在操作系统进程级测试驱动的隔离环境中运行。
http://localhost:21121
证明了它的有效性

我们的应用程序必须与不同版本的ESs交互。因此,这是该解决方案在我们的案例中也很有用的另一个原因,因为我们无法通过在类路径中添加多个elasticsearch.jar来测试多个版本的ESs


注意:如果这种方法对您来说类似于“穷人的Docker”,您也可以看看project。我自己没有尝试过,但我认为这是可能的,假设您的测试基础设施使用Docker。

嵌入式elasticsearch不再受支持

您可以使用此maven依赖项,它将为您启动elasticsearch 6集群

<dependency>
     <groupId>org.elasticsearch-6</groupId>
     <artifactId>elasticsearch-embedded-cluster</artifactId>
     <version>1.0-SNAPSHOT</version>
</dependency>

org.elasticsearch-6

“这不再编译”什么是编译错误?当然,在生产中嵌入弹性搜索当然不是一个好主意,但我仍然需要它来测试。我更新了我的答案,你可以考虑从你答案中提供的链接中嵌入相关的部分。链接来来往往,没有比找到一个答案更令人沮丧的了。o一个问题,你被困了几个小时,却发现其中的链接已经失效:)如果您使用Maven并且不想使用Ant脚本,那么您也可以在构建的集成测试阶段使用Elasticsearch Maven插件来运行Elasticsearch版本5+的实例:这有点帮助。现在我得到了
java.lang.IllegalStateException:无法获得节点锁,尝试了锁id为[0]的[[target/Elasticsearch]];可能这些位置不可写,或者在未增加[node.max_local_storage_nodes](was[1])的情况下启动了多个节点
如果数据文件夹有问题,你可以尝试删除它。你知道我得到了什么吗,
原因是:java.lang.IllegalStateException:查找构建短哈希时出错。现在停止Elasticsearch,这样它就不会以微妙的方式运行。这可能是一个构建错误。
我使用的是版本
5.2.2
顺便说一句。@AhmetDAL我还没有在5.2.2上尝试过,因为我们的主要搜索项目目前仍在ES 2.4上运行。如果你能让它工作,请编辑我的答案:)很好的方法。对我来说是开箱即用的。唯一的缺点是它启动了第二个JVM,它消耗的内存比进程中的要多。@Tomas这正是我正在搜索的,我可以要启动elasticsearch实例,请您指导我如何加载文件/数据以及如何基于密钥搜索该数据?我是ES新手。@Prajitha ES具有强大的REST API,请参阅手册。您可以在localhost url上与生成的ES进行通信,如我上面所述。@TomášZálusk感谢您的回答。您救了我一天!同意TestContainers。我前一段时间推过:。也就是说,我更喜欢使用docker fabric8 maven插件。例如,请参见此项目:
<dependency>
     <groupId>org.elasticsearch-6</groupId>
     <artifactId>elasticsearch-embedded-cluster</artifactId>
     <version>1.0-SNAPSHOT</version>
</dependency>