diff --git a/services/libs/opensearch/src/fieldTranslator.ts b/services/libs/opensearch/src/fieldTranslator.ts index 883816cb18..873efc573f 100644 --- a/services/libs/opensearch/src/fieldTranslator.ts +++ b/services/libs/opensearch/src/fieldTranslator.ts @@ -51,6 +51,10 @@ export default abstract class FieldTranslator { return value } + isNestedField(field: string): boolean { + return field.startsWith('nested_') + } + translateObjectToCrowd(object: unknown): unknown { const translated = {} diff --git a/services/libs/opensearch/src/opensearchQueryParser.ts b/services/libs/opensearch/src/opensearchQueryParser.ts index 40c343dd05..4b90f51553 100644 --- a/services/libs/opensearch/src/opensearchQueryParser.ts +++ b/services/libs/opensearch/src/opensearchQueryParser.ts @@ -65,7 +65,18 @@ export class OpensearchQueryParser { } else if (translator.fieldExists(key)) { const searchKey: string = translator.crowdToOpensearch(key) - query.bool.must.push(this.parseColumnCondition(filters[key], searchKey)) + if (translator.isNestedField(searchKey)) { + // Extract the path to the nested object + const nestedPath = searchKey.split('.')[0] + query.bool.must.push({ + nested: { + path: nestedPath, + query: this.parseColumnCondition(filters[key], searchKey), + }, + }) + } else { + query.bool.must.push(this.parseColumnCondition(filters[key], searchKey)) + } } else { throw new Error(`Unknown field or operator: ${key}!`) }