Support for nested aggs
greghopkins opened this issue · 2 comments
greghopkins commented
Hi.
I am trying to convert the following ES request into the Tirexs Query DSL.
GET /<index>/_search
{
"size": 0,
"query": {
"bool": {
"filter": {
"range": {
"created_at": {
"gte": "2000-01-01",
"lte": "2020-01-01",
"format": "yyyy-MM-dd"
}
}
}
}
},
"aggs" : {
"edits": {
"nested": {
"path": "edits"
},
"aggs": {
"keywords": {
"terms": {
"script" : {
"source": "List x = []; x.addAll(doc['edits.keywords.mood.raw'].values); x.addAll(doc['edits.keywords.musical.raw'].values); x.addAll(doc['edits.keywords.tv_film.raw'].values); x.addAll(doc['edits.keywords.various.raw'].values); return x"
},
"size": 50,
"order": {
"_count": "desc"
}
}
}
}
}
}
}
According to my read of the documentation, the equivalent Query DSL would be:
search index: "kontent_core" do
size(0)
query do
bool do
filter do
range(
"created_at",
from: DateTime.to_unix(start_date),
to: DateTime.to_unix(end_date)
)
end
end
end
aggs do
edits do
nested path: "edits" do
aggs do
keywords do
terms(
script:
"List x = []; x.addAll(doc['edits.keywords.mood.raw'].values); x.addAll(doc['edits.keywords.musical.raw'].values); x.addAll(doc['edits.keywords.tv_film.raw'].values); x.addAll(doc['edits.keywords.various.raw'].values); return x;",
size: limit,
order: %{"_count" => order_by_frequency}
)
end
end
end
end
end
end
I am getting a compilation error:
** (FunctionClauseError) no function clause matching in Tirexs.Search.Aggs._aggs/2
The following arguments were given to Tirexs.Search.Aggs._aggs/2:
# 1
:nested
# 2
[[path: "edits"], [do: {:aggs, [line: 107], [[do: {:keywords, [line: 108], [[do: {:terms, [line: 109], [[script: "List x = []; x.addAll(doc['edits.keywords.mood.raw'].values); x.addAll(doc['edits.keywords.musical.raw'].values); x.addAll(doc['edits.keywords.tv_film.raw'].values); x.addAll(doc['edits.keywords.various.raw'].values); return x;", size: {:limit, [line: 112], nil}, order: {:%{}, [line: 113], [{"_count", {:order_by_frequency, [line: 113], nil}}]}]]}]]}]]}]]
Attempted function clauses (showing 1 out of 1):
defp _aggs(name, params) when is_tuple(params)
(tirexs) lib/tirexs/search/aggs.ex:88: Tirexs.Search.Aggs._aggs/2
(tirexs) lib/tirexs/search/aggs.ex:10: Tirexs.Search.Aggs.extract/2
(tirexs) lib/tirexs/search/aggs.ex:96: Tirexs.Search.Aggs.routers/2
(tirexs) lib/tirexs/search/aggs.ex:10: Tirexs.Search.Aggs.extract/2
(tirexs) lib/tirexs/search/aggs.ex:96: Tirexs.Search.Aggs.routers/2
(tirexs) lib/tirexs/search.ex:28: Tirexs.Search.extract/2
(tirexs) expanding macro: Tirexs.Search.search/2
Thoughts? Thanks!
OpakAlex commented
Hello @greghopkins!
We don't support dsl now. In next version we will remove all dsl from this lib. So use please default elixir types:
aggs: [
edits: [
nested: [
path: "edits",
aggs: []
]
]
]
greghopkins commented
Thanks! Closing.