<field reporter:label="Host" name="host" reporter:datatype="text"/>
<field reporter:label="Protocol" name="proto" reporter:datatype="text"/>
<field reporter:label="Port" name="port" reporter:datatype="int"/>
+ <field reporter:label="Path" name="path" reporter:datatype="text"/>
<field reporter:label="Active" name="active" reporter:datatype="bool"/>
</fields>
<links>
my @nodes;
for my $server (@{$self->nodes}) {
- push(@nodes, sprintf("%s://%s:%d",
- $server->proto, $server->host, $server->port));
+ push(@nodes, sprintf("%s://%s:%d%s",
+ $server->proto, $server->host, $server->port, $server->path));
}
$logger->debug("ES connecting to nodes @nodes");
# Apply field boost.
$def->{boost} = $field->weight if ($field->weight || 1) > 1;
- $logger->info("ES adding field $field_name: ".
+ $logger->debug("ES adding field $field_name: ".
OpenSRF::Utils::JSON->perl2JSON($def));
$mappings->{$field_name} = $def;
my $conf = {
index => $INDEX_NAME,
- body => {
- settings => $settings,
- mappings => {record => {properties => $mappings}}
- }
+ body => {settings => $settings}
};
- # Send the index definition to Elastic
+
+ $logger->info("ES creating index '$INDEX_NAME'");
+
+ # Create the base index with settings
eval { $self->es->indices->create($conf) };
if ($@) {
$logger->error("ES failed to create index cluster=".
$self->cluster. "index=$INDEX_NAME error=$@");
- print "$@\n\n";
+ warn "$@\n\n";
return 0;
}
+ # Create each mapping one at a time instead of en masse so we
+ # can more easily report when mapping creation fails.
+
+ for my $field (keys %$mappings) {
+ $logger->info("ES Creating index mapping for field $field");
+
+ eval {
+ $self->es->indices->put_mapping({
+ index => $INDEX_NAME,
+ type => 'record',
+ body => {properties => {$field => $mappings->{$field}}}
+ });
+ };
+
+ if ($@) {
+ my $mapjson = OpenSRF::Utils::JSON->perl2JSON($mappings->{$field});
+
+ $logger->error("ES failed to create index mapping: " .
+ "index=$INDEX_NAME field=$field error=$@ mapping=$mapjson");
+
+ warn "$@\n\n";
+ return 0;
+ }
+ }
+
return 1;
}