[英]Elasticsearch can't read ScriptedMetric from BucketScript?
我應該工作,因為ScriptedMetric是一個指標,它確實返回一個數字值,但是我無法使其正常工作。
我在C#中使用NEST(5.5.0通過NuGet,我的目標是Elasticsearch 6.0.0)使其工作,但是我也嘗試在Kibana中構建相同的查詢以排除NEST的問題。 在基巴納語中,我得到了完全相同的錯誤。
錯誤:
buckets_path必須引用數字值或單值數字量度聚合,得到:org.elasticsearch.search.aggregations.metrics.scripted.InternalScriptedMetric
我的代碼:
ISearchResponse<LogItem> aggregationResponse = await client.SearchAsync<LogItem>(s => s
.Size(0)
.Type("errordoc")
.Query(...)
.Aggregations(a => a
.Terms("Hash", st => st
.Field(o => o.messageHash.Suffix("keyword")).OrderDescending("Avg-Score")
.Aggregations(aa => aa
.Terms("Friendly", ff => ff
.Field(oo => oo.friendly.Suffix("keyword"))
)
.Max("Max-DateTime", ff => ff
.Field(oo => oo.dateTimeStamp)
)
.Average("Avg-Score", sc => sc
.Script("_score")
)
.ScriptedMetric("Urgency-Level", sm => sm
.InitScript(i => i.Inline("params._agg.data = []").Lang("painless"))
.MapScript(i => i.Inline("params._agg.data.add(doc.urgency.value)").Lang("painless"))
.CombineScript(i => i.Inline("int urgency = 0; for (u in params._agg.data) { urgency += u } return urgency").Lang("painless"))
.ReduceScript(i =>i.Inline("int urgency = 0; for (a in params._aggs) { urgency += a } return urgency").Lang("painless"))
)
.BucketScript("finalScore", scb => scb
.BucketsPath(bp => bp
.Add("maxDateTime", "Max-DateTime")
.Add("avgScore", "Avg-Score")
.Add("urgencyLevel", "Urgency-Level")
)
.Script(i => i.Inline("params.avgScore").Lang("painless"))
)
)
)
)
);
ScriptedMetric聚合返回的數據集為11。
難道我做錯了什么? 還是不可能? 如果不可能的話,有什么替代方法?
另外,我知道這個ScriptedMetric確實做了Sum會做的事情,但這當然會改變...
索引映射:
PUT /live
{
"mappings": {
"errordoc": {
"properties": {
"urgency": {
"type": "integer"
},
"dateTimeStamp": {
"type": "date",
"format": "MM/dd/yyyy hh:mm:ss a"
} }
}
}
}
測試數據:
POST /live/errordoc
{ "messageID": "M111111", "messageHash": "1463454562\/-1210136287\/-1885530817\/-275007043\/-57589585", "friendly": "0", "urgency": "1", "organisation": "Organisation Name", "Environment": "ENV02", "Task": "TASK01", "Action": "A12", "dateTimeStamp": "11\/29\/2017 10:24:21 AM", "machineName": "DESKTOP-SMOM9R9", "parameters": "{ " }
復制此文檔幾次,也許更改urgency / dateTimeStamp,只要哈希保持不變,它就應該重現我的環境...
創建了2個GitHub問題后,Elasticsearch論壇上的某人回答了...我確實嘗試了所有方法,包括此解決方案,但是在嘗試過程中我一定做錯了其他東西...好吧...
解決方案
更改:
.Add("urgencyLevel", "Urgency-Level")
至:
.Add("urgencyLevel", "Urgency-Level.value")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.