Hello there,
It’s me again. I am running the following query in Mongo:
db.product.aggregate([
{
"$search": {
"autocomplete": {
"path": "description",
"query": "product"
}
}
},
{
"$match": {
"tenantId": "bbb60d4e-212f-445e-97a7-ddad13395931",
"isArchive": false,
"isActive": true
}
},
{
"$sort": {
"description": 1
}
},
{
"$skip": 0
},
{
"$limit": 10
}
])
So, the query is working fine, but when I query in autocomplete a word with lots of matches, it takes more than a minute to be completed.
So I was wondering if it is possible to use the $match of tenantId inside the search. To contextualize better: I am working on a system that you can have your online store, so when you search for a product, it must appear only products from that store (tenantId).
Searching, I read something about using compound inside the $search, but I couldn’t discover how to make an exact match in tenantId. I saw the $equal option, but it is only possible to use with ObjectId or boolean.
I know that in elasticsearch you have the term search, and it is possible to make an exact match.
In a hypothetical and a contextualization way, what I need is:
db.product.aggregate([
{
"$search": {
"$match": "tenantId": "bbb60d4e-212f-445e-97a7-ddad13395931",
"autocomplete": {
"path": "description",
"query": "product"
}
}
},
{
"$match": {
"isArchive": false,
"isActive": true
}
},
{
"$sort": {
"description": 1
}
},
{
"$skip": 0
},
{
"$limit": 10
}
])
What I tried with compound that gives me an error:
db.product.aggregate([
{
"$search": {
"index": "description-search-index",
"compound": {
"must": [
{
"equals": {
"path": "description",
"value": "bbb60d4e-212f-445e-97a7-ddad13395931"
}
},
{
"autocomplete": {
"path": "description",
"query": "produ"
}
}
]
}
}
},
{
"$project": {
"description": 1
}
}
])
If I have to create a specification in the search index for the tenantId field, it would be very helpful to understand the best way for exact match performance.