【问题标题】:Converting the elasticjs query to native elastic search DSL query in node app using typescript使用打字稿将elasticjs查询转换为节点应用程序中的本机弹性搜索DSL查询
【发布时间】:2019-01-10 09:55:12
【问题描述】:

我正在尝试将我的查询转换为使用弹性 js 完成的查询,该弹性 js 是完整的库,现在完整的库自 2014 年以来已经有一段时间没有更新了。我想将使用 fullscale 编写的所有查询转换为本机弹性搜索 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);
}

任何帮助将不胜感激。

【问题讨论】:

    标签: typescript elasticsearch elasticsearch-dsl


    【解决方案1】:

    在我尝试如何解决对我有用的解决方案后,我愿意寻求建议以使我的答案更好。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多