Не удалось выполнить эластичный поиск во всех шардах - PullRequest
0 голосов
/ 29 сентября 2019

Ранее я использовал версию 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())
    }

Так что бы решить эту проблему ??Есть ли какой-то контекст, поддерживающий проблему с прокруткой? Поскольку я искал много мест - прокрутка отсутствует из-за тайм-аута.Но каково было бы решение для этого ??

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