Quantcast
Viewing latest article 4
Browse Latest Browse All 269

How to create search index for an attribute and query it which has nested dynamic fields in mongoDB atlas search?

I want to create an index on qualityConfirmations attribute and query it. As qualityConfirmations has dynamic fields at the root level for eg. 228, 234, and inside that I need to query for "qualityConfirmation.qualityConfirmationComment", "qualityConfirmation.inspectDate" and other fields.

  {"_id": "4fa10c9b-099b-4269-92c9-ed22095f80c5","qualityConfirmations": {"228": {"qualityConfirmation": {"delayGroupCode": "05","estimatedDelayDays": 42,"inspectDate": {"$date": "2022-04-26T00:00:00.000Z"          },"qualityConfirmationCode": "R","qualityConfirmationComment": "QUALITY CONFIRMATION ACTIVITIES","qualityConfirmationDescription": "RELEASED","qualityConfirmationYear": 2022,"repairDate": {"$date": "2022-05-13T00:00:00.000Z"          },"stopSaleNumber": "228"        }      },"234": {"qualityConfirmation": {"delayGroupCode": "40","estimatedDelayDays": 294,"inspectDate": {"$date": "2022-05-26T00:00:00.000Z"          },"qualityConfirmationCode": "R","qualityConfirmationComment": "QUALITY CONFIRMATION ACTIVITY","qualityConfirmationDescription": "RELEASED","qualityConfirmationYear": 2022,"repairDate": {"$date": "2022-09-23T00:00:00.000Z"          },"stopSaleNumber": "234"        }      }    }  },  {"_id": "4fa10c9b-099b-4269-92c9-ed22095f80c6","qualityConfirmations": {"237": {"qualityConfirmation": {"delayGroupCode": "39","estimatedDelayDays": 287,"inspectDate": {"$date": "2022-06-02T00:00:00.000Z"          },"qualityConfirmationCode": "R","qualityConfirmationComment": "QUALITY CONFIRMATION ACTIVITY","qualityConfirmationDescription": "RELEASED","qualityConfirmationYear": 2022,"repairDate": {"$date": "2022-11-07T00:00:00.000Z"          },"stopSaleNumber": "237"        }      },"246": {"qualityConfirmation": {"delayGroupCode": "34","estimatedDelayDays": 252,"inspectDate": {"$date": "2022-07-19T00:00:00.000Z"          },"qualityConfirmationCode": "R","qualityConfirmationComment": "QUALITY CONFIRMATION ACTIVITY","qualityConfirmationDescription": "RELEASED","qualityConfirmationYear": 2022,"repairDate": {"$date": "2022-09-23T00:00:00.000Z"          },"stopSaleNumber": "246"        }      }    }  },  {"_id": "4fa10c9b-099b-4269-92c9-ed22095f80c7","qualityConfirmations": {"265": {"qualityConfirmation": {"delayGroupCode": "19","estimatedDelayDays": 147,"inspectDate": {"$date": "2022-10-19T00:00:00.000Z"          },"qualityConfirmationCode": "R","qualityConfirmationComment": "ABC CONFIRMATION ACTIVITY","qualityConfirmationDescription": "RELEASED","qualityConfirmationYear": 2022,"repairDate": {"$date": "2022-11-08T00:00:00.000Z"          },"stopSaleNumber": "265"        }      }    }  }]

I've used below schema and query for same.

"mappings": {"dynamic": true,"fields": {"qualityConfirmations": {"type": "document","dynamic": true,"fields": {"*": {"dynamic": true,"type": "document","fields": {"qualityConfirmation": {"type": "document","dynamic": false,"fields": {"qualityConfirmationComment": {"type": "string","analyzer": "earmarkAnalyzer"                  }                }              }            }          }        }      }    }  },"analyzers": [    {"charFilters": [],"name": "earmarkAnalyzer","tokenFilters": [],"tokenizer": {"type": "keyword"      }    }  ]}**QUERY:**[  {    $search: {      index: "default",      compound: {        must: [          {            phrase: {              path: {                wildcard:"qualityConfirmations.*.qualityConfirmation.qualityConfirmationComment"              },              query: ["ABC CONFIRMATION"],            }          },        ],        mustNot: [],        should: [],        minimumShouldMatch: 0,      },    },  },]

But the result is not coming as expected. For example, If I want to use exact match , it still brings up all the results matching input, I've also used KEYWORD analyzer to create single token but it is not working. I want to search for both string and date Types.

Please find below the atlas playground link for same .

https://search-playground.mongodb.com/tools/code-sandbox/snapshots/676030e03206573cca5920b8


Viewing latest article 4
Browse Latest Browse All 269

Trending Articles