Преобразование запросаasticjs в собственный DSL-запрос эластичного поиска в приложении узла с использованием машинописи - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь преобразовать свой запрос, который был выполнен с использованием эластичного 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);
}

Любая помощь будет оценена Спасибо.

1 Ответ

0 голосов
/ 14 января 2019

После того, как я поэкспериментировал, как сделать i для решения, которое работает для меня, я открыт для предложений по улучшению моего ответа.

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;
}
...