Перейти эластичный клиент: придется подождать некоторое время, прежде чем запустить запрос - PullRequest
0 голосов
/ 25 сентября 2018

Я использую Оливково-эластичную библиотеку , чтобы подключиться к резинке.Итак, у меня есть один клиент, подключитесь к нему, добавьте несколько документов.Тогда у меня есть другой клиент, который делает поиск.Но мне нужно подождать около секунды, потому что немедленный ответ пуст

_, 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 голосов
/ 25 сентября 2018

Вы можете:

  • запросить немедленное обновление
  • ждать его обновления (запланированное обновление или другое обновление по требованию)

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

0 голосов
/ 25 сентября 2018

Это относится к поведению ES и не имеет ничего общего с клиентом GO.

ES не индексирует документ сразу, так как он добавляется в индекс (по умолчанию это происходит каждые 1 секунду, если япомните правильно).Вы можете увеличить скорость индексации в ES, и это было бы хорошо для разработки, но в производстве и с высокой нагрузкой на ES, которая может привести к снижению производительности.

Это называется refresh_interval, и вы можетеподробнее об этом в документации

0 голосов
/ 25 сентября 2018

Вероятно, вы хотите использовать API обновления, см. https://github.com/olivere/elastic/blob/release-branch.v6/indices_refresh.go

Вставка выполняется в режиме реального времени, но индексы, используемые get, не равны

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...