使用打字稿将 elasticjs 查询转换为节点应用程序中的本机弹性搜索 DSL 查询

Converting the elasticjs query to native elastic search DSL query in node app using typescript

我正在尝试转换使用弹性 js 完成的查询,它是全尺寸库,因为自 2014 年以来全尺寸库已经有一段时间没有更新了。我想将使用全尺寸编写的所有查询转换为本机弹性搜索 DSL。我在做的时候遇到了一个小问题。 这是下面的样子

function getFilterNative(field: string, type: string, values: string[]): any {
    if (type === "equals") {

         return ejs.TermFilter(field, values[0].toLowerCase());

    }
     var arrFilter: Array<any> = [];
     for (var i in values) {
        arrFilter.push(ejs.TermFilter(field, values[i].toLowerCase()));
    }
    return ejs.OrFilter(arrFilter);
}

我正在努力实现这样的目标

function getFilterNative(field: string, type: string, values: string[]): any {
    if (type === "equals") {

        //return ejs.TermFilter(field, values[0].toLowerCase());
        var termFilter ={
            "term":{}
    //error in here when compiling the ts file
//error TS2403: Subsequent variable declarations must have the same type.  Variable 'termFilter' must be of type '{ "term": {}; }', but here has type '{ terms: { field: string; }; }'.




        };
        termFilter["term"][field] =  values[0].toLowerCase();
    }
    var orFilter = {filter:
        {
            or: {
                filters: []
            }
        }};
    var arrFilter: Array<any> = [];
    for (var i in values) {
        var termFilter = {
            terms: {
                field: values[i].toLowerCase()
            }
        };
        arrFilter.push(termFilter)
        //arrFilter.push(ejs.TermFilter(field, values[i].toLowerCase()));
    }
    orFilter.filter.or.filters = arrFilter;
    return orFilter;
    //return ejs.OrFilter(arrFilter);
}

如有任何帮助,我们将不胜感激。

在我尝试了如何为我工作的解决方案后,我愿意接受建议,使我的答案更好。

function getFilterNative(field: string, type: string, values: string[]): any {
    if (type === "equals") {
        var filterVal: { [k: string]: any } = {};
        filterVal[field] = values[0].toLowerCase();
        var termFilter = {
            term: filterVal
        };
        return termFilter;
    };

    var orFilter = {
        filter:
            {
                or: {
                    filters: []
                }
            }
    };
    var arrFilter: Array<any> = [];
    for (var i in values) {
        var filterVal: { [k: string]: any } = {};
        filterVal[field] = values[i].toLowerCase()
        var termFilter = {
            term: filterVal
        };
        arrFilter.push(termFilter)
    }
    orFilter.filter.or.filters = arrFilter;
    return orFilter;
}