feat: added nested op

This commit is contained in:
Methapon2001 2024-01-17 11:21:41 +07:00
parent e655b9b325
commit ce22f77b32
No known key found for this signature in database
GPG key ID: 849924FEF46BD132
2 changed files with 43 additions and 21 deletions

View file

@ -1,15 +1,32 @@
export interface Search {
AND?: {
field: string;
value: string;
exact?: boolean;
}[];
OR?: {
field: string;
value: string;
exact?: boolean;
}[];
import { QueryDslQueryContainer } from "@elastic/elasticsearch/lib/api/types";
export interface SearchInfo {
field: string;
value: string;
exact?: boolean;
}
export interface SearchOperator {
AND?: (SearchInfo | SearchOperator)[];
OR?: (SearchInfo | SearchOperator)[];
}
export interface Search extends SearchOperator {
recursive?: boolean;
path?: string[];
exact?: boolean;
}
export function mapCallback(exact: boolean) {
const type = ["match", "match_phrase"] as const;
return (v: SearchInfo | SearchOperator): QueryDslQueryContainer => {
return "field" in v && "value" in v
? { [type[exact || v.exact ? 1 : 0]]: { [v.field]: v.value } }
: {
bool: {
must: v.AND?.map(mapCallback(exact)),
should: v.OR?.map(mapCallback(exact)),
},
};
};
}