带有Search :: ElasticSearch :: Scroll的ElasticSearch(search_context_missing_exception)

约旦

我正在使用Search :: Elasticsearch和Search :: Elasticsearch ::滚动以进行搜索,并滚动到我的Elasticsearch服务器中。

在滚动过程中,对于某些查询,我在滚动搜索结果时看到了下一个错误:

2016/03/22 11:03:38 - 265885 FATAL: [Daemon.pm][8221]: Something gone wrong, error $VAR1 = bless( {
 'msg' => '[Missing] ** [http://localhost:9200]-[404] Not Found, called from sub Search::Elasticsearch::Scroll::next at searcher.pl line 92. With vars: {\'body\' => {\'hits\' => {\'hits\' => [],\'max_score\' => \'0\',\'total\' => 5215},\'timed_out\' => bless( do{\\(my $o = 0)}, \'JSON::XS::Boolean\' ),\'_shards\' => {\'failures\' => [{\'index\' => undef,\'reason\' => {\'reason\' => \'No search context found for id [4920053]\',\'type\' => \'search_context_missing_exception\'},\'shard\' => -1},{\'index\' => undef,\'reason\' => {\'reason\' => \'No search context found for id [5051485]\',\'type\' => \'search_context_missing_exception\'},\'shard\' => -1},{\'index\' => undef,\'reason\' => {\'reason\' => \'No search context found for id [4920059]\',\'type\' => \'search_context_missing_exception\'},\'shard\' => -1},{\'index\' => undef,\'reason\' => {\'reason\' => \'No search context found for id [5051496]\',\'type\' => \'search_context_missing_exception\'},\'shard\' => -1},{\'index\' => undef,\'reason\' => {\'reason\' => \'No search context found for id [5051500]\',\'type\' => \'search_context_missing_exception\'},\'shard\' => -1}],\'failed\' => 5,\'successful\' => 0,\'total\' => 5},\'_scroll_id\' => \'c2NhbjswOzE7dG90YWxfaGl0czo1MjE1Ow==\',\'took\' => 2},\'request\' => {\'serialize\' => \'std\',\'path\' => \'/_search/scroll\',\'ignore\' => [],\'mime_type\' => \'application/json\',\'body\' => \'c2Nhbjs1OzQ5MjAwNTM6bHExbENzRDVReEc0OV9UMUgzd3Vkdzs1MDUxNDg1OnJrQ3lsUkRKVHRxRWRWeURoOTB4WVE7NDkyMDA1OTpscTFsQ3NENVF4RzQ5X1QxSDN3dWR3OzUwNTE0OTY6cmtDeWxSREpUdHFFZFZ5RGg5MHhZUTs1MDUxNTAwOnJrQ3lsUkRKVHRxRWRWeURoOTB4WVE7MTt0b3RhbF9oaXRzOjUyMTU7\',\'qs\' => {\'scroll\' => \'1m\'},\'method\' => \'GET\'},\'status_code\' => 404}
',
 'stack' => [
              [
                'searcher.pl',
                92,
                'Search::Elasticsearch::Scroll::next'
              ]
            ],
 'text' => '[http://localhost:9200]-[404] Not Found',
 'vars' => {
             'body' => {
                         'hits' => {
                                     'hits' => [],
                                     'max_score' => '0',
                                     'total' => 5215
                                   },
                         'timed_out' => bless( do{\(my $o = 0)}, 'JSON::XS::Boolean' ),
                         '_shards' => {
                                        'failures' => [
                                                        {
                                                          'index' => undef,
                                                          'reason' => {
                                                                        'reason' => 'No search context found for id [4920053]',
                                                                        'type' => 'search_context_missing_exception'
                                                                      },
                                                          'shard' => -1
                                                        },
                                                        {
                                                          'index' => undef,
                                                          'reason' => {
                                                                        'reason' => 'No search context found for id [5051485]',
                                                                        'type' => 'search_context_missing_exception'
                                                                      },
                                                          'shard' => -1
                                                        },
                                                        {
                                                          'index' => undef,
                                                          'reason' => {
                                                                        'reason' => 'No search context found for id [4920059]',
                                                                        'type' => 'search_context_missing_exception'
                                                                      },
                                                          'shard' => -1
                                                        },
                                                        {
                                                          'index' => undef,
                                                          'reason' => {
                                                                        'reason' => 'No search context found for id [5051496]',
                                                                        'type' => 'search_context_missing_exception'
                                                                      },
                                                          'shard' => -1

                                                                                                        },
                                                        {
                                                          'index' => undef,
                                                          'reason' => {
                                                                        'reason' => 'No search context found for id [5051500]',
                                                                        'type' => 'search_context_missing_exception'
                                                                      },
                                                          'shard' => -1
                                                        }
                                                      ],
                                        'failed' => 5,
                                        'successful' => 0,
                                        'total' => 5
                                      },
                         '_scroll_id' => 'c2NhbjswOzE7dG90YWxfaGl0czo1MjE1Ow==',
                         'took' => 2
                       },
             'request' => {
                            'serialize' => 'std',
                            'path' => '/_search/scroll',
                            'ignore' => [],
                            'mime_type' => 'application/json',
                            'body' => 'c2Nhbjs1OzQ5MjAwNTM6bHExbENzRDVReEc0OV9UMUgzd3Vkdzs1MDUxNDg1OnJrQ3lsUkRKVHRxRWRWeURoOTB4WVE7NDkyMDA1OTpscTFsQ3NENVF4RzQ5X1QxSDN3dWR3OzUwNTE0OTY6cmtDeWxSREpUdHFFZFZ5RGg5MHhZUTs1MDUxNTAwOnJrQ3lsUkRKVHRxRWRWeURoOTB4WVE7MTt0b3RhbF9oaXRzOjUyMTU7',
                            'qs' => {
                                      'scroll' => '1m'
                                    },
                            'method' => 'GET'
                          },
             'status_code' => 404
           },
 'type' => 'Missing'
}, 'Search::Elasticsearch::Error::Missing' );

我正在使用的代码是下一个(简体):

# Retrieve scroll 
my $scroll = $self->getScrollBySignature($item);

# Retrieve all affected documents ids 
while (my @docs = $scroll->next(500)) {
    # Do stuff with @docs
}

函数getScrollBySignature具有下一个代码,以便调用elasticSearch

my $scroll = $self->{ELASTIC}->scroll_helper(
    index              => $self->{INDEXES},
    search_type        => 'scan',
    ignore_unavailable => 1,
    body               => {
        size  => $self->{PAGINATION},
        query => {
            filtered => {
                filter => {
                    bool => {
                        must => [{term => {signature_id => $item->{profileId}}}, {terms => {channel_type_id => $type}}]
                    }
                }
            }
        }
    }
);

如您所见,我在进行滚动操作时未传递scroll参数,然后如文档所述,滚动生效的时间为1分钟。

elasticSearch是一个由3个服务器组成的集群,以该错误结尾的查询检索的文档多于5000个。

我的第一个解决方案是将滚动的生命周期更新为5分钟,并且没有出现该错误。

问题是,据我了解,每当我调用$ scroll-> next()时,受影响的滚动寿命将增加1m,那么如何接收与上下文相关的错误呢?

我做事不好吗?

谢谢你们。

约旦

好吧,一个好的经验法则是在一个->next()块内,不要在迭代中停留比在滚动中配置的时间更多的时间。

->next()每次通话之间的停留时间不能超过配置的时间。如果您停留的时间更长,则可能没有滚动条,并且earch_context_missing_exception会出现错误

我对这个问题的解决方案是在下一个块内部,仅将数据存储到数组/哈希结构中,并且一旦滚动过程结束,所有数据都将工作。

问题示例的解决方案:

   # Retrieve scroll 
   my $scroll = $self->getScrollBySignature($item);

   # Retrieve all affected documents ids 
   my @allDocs;
   while (my @docs = $scroll->next(500)) {
       push @allDocs, map {$_->{_id}} @docs
   }

   foreach (@allDocs) {
      # Do stuff with doc
   }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带有Express框架的ElasticSearch

来自分类Dev

带有分组的Elasticsearch查询

来自分类Dev

带有 Elasticsearch 的 Sleuth + Zipkins

来自分类Dev

带有嵌套 AND/OR 查询的 Elasticsearch

来自分类Dev

Elasticsearch search analyzer

来自分类Dev

带有Elasticsearch的NoSQL(Mongo,DynaoDB)与单个Elasticsearch

来自分类Dev

带有searchkick / elasticsearch的Docker Rails应用

来自分类Dev

带有对象的ElasticSearch null_value?

来自分类Dev

带有多个过滤器的ElasticSearch

来自分类Dev

Spring中带有@Query的ElasticSearch

来自分类Dev

带有查询输入的ElasticSearch查询

来自分类Dev

带有multi_match AND bool的ElasticSearch

来自分类Dev

Kibana(Elasticsearch)带有uniq值的计数

来自分类Dev

带有空格的Elasticsearch通配符查询

来自分类Dev

带有Elasticsearch的实词拼写检查器

来自分类Dev

带有数字标记的elasticsearch映射

来自分类Dev

带有SSL的Elasticsearch-OSS 7.9.2

来自分类Dev

带有多个条件的Elasticsearch OR条件

来自分类Dev

带有地理位置的Elasticsearch

来自分类Dev

Kibana(Elasticsearch)带有uniq值的计数

来自分类Dev

带有变量的elasticsearch查询脚本

来自分类Dev

带有 url 数组的 Elasticsearch 术语

来自分类Dev

default_search_timeout在Elasticsearch上的行为

来自分类Dev

Hibernate-Search 6和Elasticsearch集成

来自分类Dev

ElasticSearch Query Search with Highlight C# Nest

来自分类Dev

MongoDB + Elasticsearch还是只有Elasticsearch?

来自分类Dev

带有空格的Elasticsearch Nest通配符查询

来自分类Dev

带有query_string和range的Elasticsearch

来自分类Dev

Django Haystack中带有Elasticsearch后端的Keyerror u'_source'