为什么Elasticsearch在Junit测试中如此之慢?

时间:2013-10-30 10:38:43

标签: java api rest elasticsearch

我试图使用ElasticSearch,所以我构建了一个简单的JUnit测试,但是测试耗时5秒,我觉得它很慢。不确定我是否错过任何东西?

        Node node = NodeBuilder.nodeBuilder().node();
        Client client = node.client();

        BulkRequestBuilder brb = client.prepareBulk();

        Map<String, Object> json = new HashMap<>();
        Map<String, Object> nest = new HashMap<>();
        nest.put("foo", "blah");

        json.put("Code", "123");
        json.put("nut", nest);
        json.put("images", newArrayList("image1", "image2"));

        brb.add(new IndexRequest("promotions", "promotion").source(json));
        brb.execute().actionGet();

        MatchQueryBuilder itemNumber = QueryBuilders.matchQuery("Code", "123");
        SearchResponse sr = client.prepareSearch("promotions").setTypes("promotion").setQuery(itemNumber).execute().actionGet();

        assertThat((List)sr.getHits().getHits()[0].getSource().get("images")).contains("image1");
        assertThat((List)sr.getHits().getHits()[0].getSource().get("images")).contains("image2");
        assertThat((List)sr.getHits().getHits()[0].getSource().get("images")).doesNotContain("image3");

1 个答案:

答案 0 :(得分:0)

您可能希望切换到本地节点进行测试。这样就可以禁用zen发现,只有在同一个jvm中运行的其他节点才能加入同一个集群。此外,节点之间没有tcp传输(如果你有多个,似乎不是这种情况),因为它们在同一个jvm中。您的节点仍将打开http传输(默认情况下为9200端口),但如果您不需要,可能需要禁用它。

无论如何,不​​要忘记设置群集名称!当您开始测试时,您的节点正在查看是否有其他节点使用相同的群集名称运行。如果是这种情况,它将加入现有集群并开始与其他节点共享数据,从而导致奇怪的测试行为。

Node node = NodeBuilder.nodeBuilder().clusterName("my_cluster").local(true).node();