Ранее я использовал версию Elastic 6.2 (для одной машины) с модулем упругости Oliver GO из эластичного 5.X И до этого все работало нормально.Поскольку я обновил версию поиска Elastic до 6.7 (теперь 4 узла данных и 1 главный узел на другой машине в кластере) с тем же модулем Oliver go 5.X.Я получаю следующие ошибки при упругом поиске и не могу обработать результат с помощью запроса ES. Мой код сначала работает нормально в течение 2-3 часов, а затем все падает, и выводится ошибка
[Elastic Error: elastic: Error 404 (Not Found): all shards failed [type=search_phase_execution_exception]
Logs in Elastic machines are -
[DEBUG][o.e.a.s.TransportSearchScrollAction][1344693] Failed to execute query phase
org.elasticsearch.transport.RemoteTransportException: [elasticsearch-6-7-XXX-XX-XX-XX][172.XX.XX.XX:9300][indices:data/read/search[phase/query/scroll]]
Caused by: org.elasticsearch.search.SearchContextMissingException: No search context found for id [1344693]
at org.elasticsearch.search.SearchService.getExecutor(SearchService.java:496) ~[elasticsearch-6.7.2.jar:6.7.2]
at org.elasticsearch.search.SearchService.runAsync(SearchService.java:373) ~[elasticsearch-6.7.2.jar:6.7.2]
at org.elasticsearch.search.SearchService.executeQueryPhase(SearchService.java:435) ~[elasticsearch-6.7.2.jar:6.7.2]
at org.elasticsearch.action.search.SearchTransportService$8.messageReceived(SearchTransportService.java:376) ~[elasticsearch-6.7.2.jar:6.7.2]
at org.elasticsearch.action.search.SearchTransportService$8.messageReceived(SearchTransportService.java:373) ~[elasticsearch-6.7.2.jar:6.7.2]
at org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:66) ~[elasticsearch-6.7.2.ja
r:6.7.2]
at org.elasticsearch.transport.TcpTransport$RequestHandler.doRun(TcpTransport.java:1087) ~[elasticsearch-6.7.2.jar:6.7.2]
at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) ~[elasticsearch-6.7.2.jar:6.7.2]
at org.elasticsearch.common.util.concurrent.EsExecutors$DirectExecutorService.execute(EsExecutors.java:192) ~[elasticsearch-6.7.2.jar
:6.7.2]
at org.elasticsearch.transport.TcpTransport.handleRequest(TcpTransport.java:1046) [elasticsearch-6.7.2.jar:6.7.2]
at org.elasticsearch.transport.TcpTransport.messageReceived(TcpTransport.java:932) [elasticsearch-6.7.2.jar:6.7.2]
at org.elasticsearch.transport.TcpTransport.inboundMessage(TcpTransport.java:763) [elasticsearch-6.7.2.jar:6.7.2]
at org.elasticsearch.transport.netty4.Netty4MessageChannelHandler.channelRead(Netty4MessageChannelHandler.java:53) [transport-netty4-
client-6.7.2.jar:6.7.2]
Возможно, это проблема прокрутки ES, поскольку она печатается в журналах, и я тоже использую запрос прокрутки.Поскольку с предыдущей версией Elastic 6.2 все работало нормально, я подумал, что, возможно, существует проблема совместимости версий с текущим модулем ES 6.7 и ES go 5.X
Поэтому я обновил модуль ES go до 6.ИКС.Теперь у меня есть версия ES 6.7 с версией ES ES lib до 6.X.
Code Related is
```
q := elastic.NewTermQuery("ABC", 1)
bq = elastic.NewBoolQuery().Filter(q)
bq = bq.MustNot(elastic.NewTermQuery("wrong", "XXX"))
bq = bq.Must(elastic.NewTermQuery("ID", 12132))
query = bq
```
hits := make(chan json.RawMessage)
g, ctx := errgroup.WithContext(context.Background())
g.Go(func() error {
defer close(hits)
scrollService := elastic.Scroll(Index).Type(Type).Query(query).Size(250)
for {
results, err := scrollService.Do(context.TODO())
if err == io.EOF {
log.Println("In for EOF")
return nil // all results retrieved
}
if err != nil {
// This error occurs after some time and logs the error
//[Elastic Error: elastic: Error 404 (Not Found): all shards failed //[type=search_phase_execution_exception]
log.Println("[Elastic Error:", err)
continue
}
// Send the hits to the hits channel
for _, hit := range results.Hits.Hits {
select {
case hits <- *hit.Source:
case <-ctx.Done():
return ctx.Err()
}
}
}
})
for i := 0; i < 100; i++ {
g.Go(func() error {
for hit := range hits {
err = json.Unmarshal(hit, &XXX)
if err != nil {
log.println("xxx)
continue
}
My processing is here !!!
select {
default:
case <-ctx.Done():
return ctx.Err()
}
}
return nil
})
}
// Check whether any goroutines failed.
if err := g.Wait(); err != nil {
log.Printf("Go Routine Err:%s", err.Error())
}
Так что бы решить эту проблему ??Есть ли какой-то контекст, поддерживающий проблему с прокруткой? Поскольку я искал много мест - прокрутка отсутствует из-за тайм-аута.Но каково было бы решение для этого ??