Hi @Luke_Thompson ,
Thank you for comments.
I tried atlas search before.
Test : dynamic mapping + facet query
Search index:
{
"mappings": {
"dynamic": true,
"fields": {
"appId": {
"indexDoubles": false,
"representation": "int64",
"type": "numberFacet"
},
"os": {
"indexDoubles": false,
"representation": "int64",
"type": "numberFacet"
}
}
}
}
The aggregate pipeline:
[
{
$searchMeta: {
index: "default",
count: {type: "total"},
facet: {
operator: {
compound: {
filter: [
{
equals: {
path: "year",
value: 2023
}
},
{
equals: {
path: "month",
value: 12
}
},
{
equals: {
path: "day",
value: 1
}
},
]
}
},
facets: {
"appIdFacet": {
default: "other",
type: "number",
path: "appId",
boundaries: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89]
}
}
}
}
}
]
The disadvantages:
- I have to define field facet type, eg. numberFacet. Atlas search won’t set facet type automatically. If new field is added to document, I have to rebuild search index, and my purpose is not to rebuild any indexes when new fields.
- The facet can’t support multiple “group by”. For example, group by appId and os, no separate. It isn’t “group by appId”, and another “group by os”.
Let me know if any,
thank you!