I will explain more clearly now. In the input I have formula field with this type of data. I am changing it into equivalent ES query through perl and want to replace in the ES
((column08=Submit | column10=Delivered | column09=Something) & (column
+08=Delivered | column09=Something))
Need to replace with
{'query' => {'constant_score' => {'filter' => {'bool' => {'should' =>
+[{'bool' => {'must' => [{'term' => {'column08' => 'Submit'}},{'term'
+=> {'column10' => 'Delivered'}},{'term' => {'column09' => 'Something'
+}}]}},{'bool' => {'must' => [{'term' => {'column08' => 'Delivered'}},
+{'term' => {'column09' => 'Something'}}]}}]}}}}}
This is for one cell. In the input we can get multi sheets with multi cells in a single book (Excel). We have replace all cells in that.
I am changing the input into the format what i need as in the output.
{
"sheets": {
"sheet1": {
"Sheet_Name": "Ex-Sheet",
"forumle": [
{
"0": {
"colName": "Ex-Col1",
"formula": "
((column08=Submit | column10=Delivered | column09=Something) & (column08=Delivered | column09=Something))",
"total": "false"
},
"1": {
"colName": "Ex-Col1",
"formula": "
((column08=Submit | column10=Delivered | column09=Something) & (column08=Delivered | column09=Something))",
"total": "false"
},
"2": {
"colName": "Ex-Col1",
"formula": "
(column08=Submit & column10=Delivered & column09=Something)",
"total": "false"
}
}
]
}
}
}
My code
getting the input into
$doc from the ES
Loop for getting all the conditions
foreach my $sheet (keys %{ $doc->{'_source'}{'sheets'} })
{
foreach my $columns (@{ $doc->{'_source'}{'sheets'}{$sheet}{'forum
+le'} })
{
foreach my $one (keys %{ $columns })
{
$condition = $columns->{$one}{'formula'};
$return_value = function_to_change($condition); #H
+ere I am changing my condition into required output
$main_hash{"query"}{"constant_score"}{"filter"} =
+{$return_value}; #Adding some more data for that
$columns->{$one}{'formula'} = \%main_hash #Wha
+t to replace that in the original doc
}
}
}
In the last line of my code I am replacing the existing field with a hash. But its working only for the first iteration of the loop. In the second iteration its showing like
'bool' => {
'should' => [
$VAR1->{'_source'}{'sheets'}{'sheet1'}{'
+forumle'}[0]{'1'}{'formula'}{'query'}{'constant_score'}{'filter'}{'bo
+ol'}{'should'}[0],
$VAR1->{'_source'}{'sheets'}{'sheet1'}{'f
+orumle'}[0]{'1'}{'formula'}{'query'}{'constant_score'}{'filter'}{'boo
+l'}{'should'}[1]]}
instead of
{"query":{"constant_score":{"filter":{"bool":{"should":[{"bool":{"must
+":[{"term":{"column08":"Submit"}},{"term":{"column10":"Delivered"}},{
+"term":{"column09":"Something"}}]}},{"bool":{"must":[{"term":{"column
+08":"Delivered"}},{"term":{"column09":"Something"}}]}},{"bool":{"must
+":[{"term":{"column08":"Submit"}},{"term":{"column10":"Delivered"}},{
+"term":{"column09":"Something"}}]}},{"bool":{"must":[{"term":{"column
+08":"Delivered"}},{"term":{"column09":"Something"}}]}}]}}}}}
But When Dump the hash or converted into json & print Its looking fine. but When I assigned it to a hash It looking like that $var->. How do assign that