0

我正在尝试使用 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");
4

1 回答 1

0

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

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

Node node = NodeBuilder.nodeBuilder().clusterName("my_cluster").local(true).node();
于 2013-10-30T12:32:43.990 回答