Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 存储elasticsearch连接的魅力助手_Perl_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Mojolicious - Fatal编程技术网 elasticsearch,mojolicious,Perl,elasticsearch,Mojolicious" /> elasticsearch,mojolicious,Perl,elasticsearch,Mojolicious" />

Perl 存储elasticsearch连接的魅力助手

Perl 存储elasticsearch连接的魅力助手,perl,elasticsearch,mojolicious,Perl,elasticsearch,Mojolicious,我正在Mojolicous内尝试elasticsearch 这两方面我都是新手 我想创建一个帮助器来存储ES连接,我希望传递与ES相关的帮助器配置(例如节点信息、文件跟踪等) 如果我写下面这个非常简单的助手,它就可以工作了 has elasticsearch => sub { return Search::Elasticsearch->new( nodes => '192.168.56.21:9200', trace_to => ['File','/tmp/ela

我正在Mojolicous内尝试elasticsearch

这两方面我都是新手

我想创建一个帮助器来存储ES连接,我希望传递与ES相关的帮助器配置(例如节点信息、文件跟踪等)

如果我写下面这个非常简单的助手,它就可以工作了

has elasticsearch => sub {
    return Search::Elasticsearch->new( nodes => '192.168.56.21:9200', trace_to => ['File','/tmp/elasticsearch.log'] );
};
然后在启动阶段

$self->helper(es => sub { $self->app->elasticsearch() });
$self->helper(es => sub { $self->app->elasticsearch($self->config->{es}) });
但是,如果我尝试扩展它以获取config-如下所示- 它失败了。当应用程序调用$self->es->index时,我得到一个错误“在包上找不到索引”

has elasticsearch => sub {
    my $config = shift;
    my $params->{nodes} = '192.168.56.21:' . $config->{port};
    $params->{trace_to} = $config->{trace_to} if $config->{trace_to};
    my $es = Search::Elasticsearch->new( $params );
    return $es;
};
在启动阶段

$self->helper(es => sub { $self->app->elasticsearch() });
$self->helper(es => sub { $self->app->elasticsearch($self->config->{es}) });
我想我只是误解了助手或配置,或者两者兼而有之——有人能启发我吗

仅供参考,在一个单独的控制器文件中,我使用助手,如下所示

$self->es->index(
    index   => $self->_create_index_name($index),
    type    => 'crawl_data',
    id      => $esid,
    body    => {
        content => encode_json $data,
    }
);
如果我使用上面的简单(第1个)表单创建帮助器,那么效果很好。
我希望这是足够的信息?如果还需要什么,请告诉我。

首先,
助手
不一样<代码>has是一个延迟构建的实例属性。属性构造函数的唯一参数是实例。对于应用程序,它看起来像:

package MyApp;

has elasticsearch => sub {
  my $app = shift;
  Search::ElasticSearch->new($app->config->{es});
};

sub startup {
  my $app = shift;
  ...
}
在首次使用后,该实例将在应用程序的整个生命周期内保持不变。我不确定S::ES是否在drop逻辑上有任何重新连接,所以您可能需要考虑一下,永久对象才是您真正想要的

相反,助手只是一种方法,可用于应用程序、所有控制器和所有模板(在后一种情况下,作为函数)。助手的第一个参数是控制器实例,取决于上下文,它是当前实例还是新实例。因此,您需要构建帮助器,如:

has (elasticsearch => sub {
  my ($c, $config) = @_;
  $config ||= $c->app->config->{es};
  Search::ElasticSearch->new($config);
});
此机制将按需构建实例,并可以接受传入参数,可能用于可选配置覆盖,如我在该示例中所示


我希望这能回答您的问题。

你好,乔-非常感谢。在这种情况下,是否有一种可接受的方法来支持在跌落时重新连接?你能想出我可以看的任何模块作为例子吗?你必须在弹性搜索社区中提问。我知道Metaspan使用弹性搜索,所以他们可能会为您提供一些答案。