在工作中動態地修改ElasticSearch查詢我的人誰不存在任何更多的做了一個腳本。它用於檢索具有如下節點的XML文件:使用Perl
<query maxresults='15000'>
<![CDATA[
and(
isavailable:1,
not(designation:string("test wine", mode="or")),
visibility:10,
bestprice:>0
)
]]>
</query>
我們正在使用Perl進行此操作。我們的目標是修改包含動態地添加一些參數的節點內的FAST請求(例如限制與「的maxResults」屬性的結果)。在這部分代碼的工作,但我們切換到ElasticSearch,我需要更改代碼,以便它的工作原理。
問題是,我找不到用Perl修改ElasticSearch查詢的可靠方法。到目前爲止,我這樣做:
use strict;
use warnings;
use JSON;
use Data::Dumper;
use Search::Elasticsearch;
my $json =
'{"query":
{"bool":
{"must":
[
{"term":
{"isavailable":"1"}
},
{"term":
{"visibility":"10"}
},
{"range":
{"bestprice":
{"gt":"0"}
}
}
],
"must_not":
[{"regexp":
{"designation":"[Tt]+[Ee]+[Ss]+[Tt]+"}
},
{"regexp":
{"designation":"[Ww]+[Ii]+[Ne]+[Ee]+"}
}
]
}
}
}';
my $result = decode_json($json);
但它給了我一個哈希值,而不是一個對象,我得到一個令人頭痛的事,以動態地修改這個哈希只是增加(例如):
{"regexp": {"designation":"[Ff]+[Oo]+"}}
到「must_not」對象內的陣列。
我試着這樣做:
my %must = (must_not => [{"regexp" =>
{"designation" => "[Ff]+[Oo]+"}
}
]);
$result{"query"} = \%must;
print keys(%{$result{query}});
但這只是替換整個節點內容與%必須散列,我無法找到一個方法來適當添加它。我試圖在must_not對象中包含的數組內部推送一個散列,但我只能得到錯誤。
我真的很困惑這種情況,特別是因爲我不是一個真正的Perl專家,所以任何幫助都比歡迎!
謝謝!
如果你從JSON轉換某些東西,你會得到一個普通的數據結構。默認情況下,Perl中沒有對象。你需要修改數據結構,這是正確的。你必須完全進入或將被替換,這是正確的。 – simbabque