ezeikel
07/25/2022, 7:48 PMezeikel
07/25/2022, 7:52 PMquery.OR = [
{
notes: {
contains: q.toString(), // TODO: try prisma full text search once mongo is supported
mode: 'insensitive',
},
},
// check against metadata/opengraph fields
{
resource: {
is: {
website: {
is: {
metadata: {
is: {
title: {
contains: q.toString(),
mode: 'insensitive',
},
},
},
},
},
},
},
},
{
resource: {
is: {
website: {
is: {
metadata: {
is: {
description: {
contains: q.toString(),
mode: 'insensitive',
},
},
},
},
},
},
},
},
{
resource: {
is: {
website: {
is: {
metadata: {
is: {
ogData: {
is: {
title: {
contains: q.toString(),
mode: 'insensitive',
},
},
},
},
},
},
},
},
},
},
{
resource: {
is: {
website: {
is: {
metadata: {
is: {
ogData: {
is: {
description: {
contains: q.toString(),
mode: 'insensitive',
},
},
},
},
},
},
},
},
},
},
{
resource: {
is: {
website: {
is: {
metadata: {
is: {
ogData: {
is: {
siteName: {
contains: q.toString(),
mode: 'insensitive',
},
},
},
},
},
},
},
},
},
},
];
Adding the OR
condition to an existing query increases query time from ~4s to ~15s. Whereas writing the whole query from scratch using aggregateRaw
its only ~1s:
{
$match: {
$or: [
{
notes: {
$regex: `.*${q}.*`,
$options: 'i',
},
},
{
'resource.website.metadata.title': {
$regex: `.*${q}.*`,
$options: 'i',
},
},
{
'resource.website.metadata.description': {
$regex: `.*${q}.*`,
$options: 'i',
},
},
{
'resource.website.metadata.ogData.title': {
$regex: `.*${q}.*`,
$options: 'i',
},
},
{
'resource.website.metadata.ogData.description': {
$regex: `.*${q}.*`,
$options: 'i',
},
},
{
'resource.website.metadata.ogData.siteName': {
$regex: `.*${q}.*`,
$options: 'i',
},
},
],
},
},
ezeikel
07/25/2022, 7:53 PMezeikel
07/25/2022, 7:56 PMSabin Adams
07/25/2022, 8:05 PMezeikel
07/26/2022, 7:49 AMPinkiePie
07/26/2022, 3:09 PMPinkiePie
07/26/2022, 3:11 PMaggregateRaw
can't help me for such cases