转到弹性客户端:必须等待一段时间才能运行查询

时间:2018-09-25 12:54:59

标签: elasticsearch go

我使用olivere elastic library连接松紧带。 所以我有一个客户端,与其连接,添加一些文档。 然后,我有另一个进行搜索的客户端。但是我必须等待大约几秒钟,因为立即响应为空

_, err := client.Index().
    Index(elasticTemplateName).
    Type(elasticType).
    Id(myID).
    BodyJson(myJson).
    Do(ctx)
require.NoError(t, err)

// wait cause of async elastic client
time.Sleep(1000 * time.Millisecond)

result, err := anotherClient.Search().Index(IndexName).SearchSource(searchSource).Do(ctx)

另一个客户:

client, err := elastic.NewClient(
    elastic.SetURL(
        conf.Hosts...
    ),
    elastic.SetSniff(false),
)

3 个答案:

答案 0 :(得分:2)

您可能要使用Refresh API,请参见https://github.com/olivere/elastic/blob/release-branch.v6/indices_refresh.go

插入是实时的,但get使用的索引不是

答案 1 :(得分:1)

您可以:

  • 请求立即刷新
  • 等待直到刷新(计划的刷新或其他按需刷新)

https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-refresh.html

答案 2 :(得分:1)

这与ES行为有关,与GO客户端无关。

ES不会立即将文档添加到索引中(如果我没有记错的话,默认值为每1秒一次)。您可以提高ES中的索引率,这对开发有利,但在生产中以及ES上的高负载可能会导致性能下降。

它称为refresh_interval,您可以在the documentation

中了解更多信息。