在搭建Elasticsearch数据库的过程中,首先使用了其推荐的Logstash工具导入数据,但是用起来非常不顺手,所以想用Perl擅长的正则表达式对数据进行过滤分类,然后导入Elasticsearch,于是搜索CPAN找到了Search::Elasticsearch模块。
该模块在CPAN上的文档写的比较简洁,于是将使用过程中的经验总结如下:
一、逐条数据写入:
use Search::Elasticsearch;
my $e=Search::Elasticsearch->new(nodes=>['localhost:9200']);
$e->index(
index=>"$index_name",
type=>"$type_name",
id=>"$id_name",
body=>{
title=>"$data_name",
data=>"$data"
}
);
二、批量数据写入:
use Search::Elasticsearch;
my $e=Search::Elasticsearch->new(nodes=>['localhost:9200']);
my $bulk=$e->bulk_helper(
index=>"$index_name",
type=>"$type_name"
);
my $i=0;
while(...){
#do something
$bulk->add_action(index=>{id=>$id_name,source=>{title =>$data_name,data=>$data}});
if ($i>999){
$bulk->flush;
$i=0;
}
$i++;
}
三、读取一条记录:
use Search::Elasticsearch;
my $e=Search::Elasticsearch->new(nodes=>['localhost:9200']);
my $doc=$e->get(
index=>"$index_name",
type=>"$type_name",
id=>"$id_name"
);
my $data=$doc->{_source}->{$data_name};
#do something
四、依次读取全部记录:
use Search::Elasticsearch;
my $e=Search::Elasticsearch->new(nodes=>['localhost:9200']);
my $scroll=$e->scroll_helper(
index=>"$index_name",
type=>"$type_name",
body=>{
query=>{match_all=>{}},
size=>5000
}
);
while (my $doc=$scroll->next){
my $id=$doc->{_id};
my $data=$doc->{_source}->{$data_name};
#do something
}
五、跳转到第$n条数据开始读取
my $doc=$scroll->next($n);
六、基本数据查询
use strict;
use Search::Elasticsearch;
my $e = Search::Elasticsearch->new(nodes => ['localhost:9200']);
my $results = $e->search(
index => $index_name,
body => {
query => {
query_string => { query => $search }
}
}
);
print $results->{hits}->{hits}->[0]->{_source}->{word};
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。