最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Elasticsearch返回类型

IT培训 admin 3浏览 0评论

Elasticsearch返回类型

我试图简单地接收插入的项目,对其进行编辑并再次更新。不幸的是,进展并不顺利。

该代码尚未最终确定,只是在进行POC处理,如果打算复制它,请不要在生产环境中使用此代码:]。

我的正常创建功能:

async create(index: string, obj: any, id: string): Promise<TModel> {
    let req: RequestParams.Create<TModel> = {
        body: obj,
        index: index,
        id: id,
    };
    try {
        var result = await this.client.create(req, {
            ignore:[409]
        });
        if (result.statusCode === 201) {
            return result.body;
        } else {
            console.log("Non succesfull call, result:", result);
            return null;
        }
    } catch (error) {
        console.log("create error", error);
        return null;
    }
}

我的更新功能大致相同

async update(index: string, obj: any, id: string): Promise<TModel> {
    try {
        let req: RequestParams.Update<TModel> = {
            body: obj,
            index: index,
            id: id
        };
        var result = await this.client.update(req);
        if (result.statusCode === 200 || result.statusCode === 201 || result.statusCode == 202 || result.statusCode == 204) {
            return result.body;
        } else {
            console.log("Non succesfull call, result:", result);
            return null;
        }
    } catch (error) {
        console.error("Error updating", error);
    }
}

我开始使用的搜索功能:

async search(index: string, searchBody: any): Promise<any> {

    try {
        var result = await this.client.search({
            index: index,
            body: searchBody
        });
        if (result.statusCode === 200) {
            return result.body.hits.hits;
        } else {
            console.log("Non succesfull call, result:", result);
            return null;
        }
    } catch (error) {
        console.log("Error getting result", error);
        return null;
    }
}

[插入并稍后搜索对象时,您当然会获得any返回类型。了解数据的结构后,我在某处执行以下操作以快速测试:

return result.body.hits.hits[0]._source

哪个给了我这个结果:

尽管对象的JSON格式似乎是正确的,就像我创建的一样,它在更新数据时会引发错误:

因此,我用Google搜索并尝试应用由Elastic自己提供的解决方案:

.html

搜索代码:

async searchTyped(index: string, searchBody: any): Promise<TModel> {
    try {
        let req : RequestParams.Search<TModel> ={
            index : index,
             body : searchBody,
        };
        var result : ApiResponse<SearchResponse<TModel>> = await this.client.search(req);
        if (result.statusCode === 200) {
            if(result.body.hits.hits.length > 0){
                return result.body.hits.hits[0]._source;
            }
            return null;
        } else {
            console.log("Non succesfull call, result:", result);
            return null;
        }
    } catch (error) {
        console.log("Error getting result", error);
        return null;
    }
}

根据智能感知,这应该起作用,_source应该是TModel类型。

不幸的是,没有运气:

我在更新之前要确保数据对象正确无误吗?

我们希望坚持使用动态映射,而不是定义所需的确切模型。我认为使用此设置,请求正文包含javascript Object或打字稿类型并没有关系吗?

回答如下:

最终,不管它是什么对象,我只需要以不同的方式进行更新:

async update(index: string, obj: any, id: string): Promise<any> {
    try {
        let req: RequestParams.Update<any> = {
            body: {
                "doc": obj
            },
            index: index,
            id: id
        };
        var result = await this.client.update(req);
        if (result.statusCode === 200 || result.statusCode === 201 || result.statusCode == 202 || result.statusCode == 204) {
            return result.body;
        } else {
            console.log("Non succesfull call, result:", result);
            return null;
        }
    } catch (error) {
        console.error("Error updating", error);
    }
}

所以所有更新都应该在doc之内,然后一切正常。

在本指南中找到:https://hub.packtpub/crud-create-read-update-delete-operations-elasticsearch/

Elasticsearch返回类型

我试图简单地接收插入的项目,对其进行编辑并再次更新。不幸的是,进展并不顺利。

该代码尚未最终确定,只是在进行POC处理,如果打算复制它,请不要在生产环境中使用此代码:]。

我的正常创建功能:

async create(index: string, obj: any, id: string): Promise<TModel> {
    let req: RequestParams.Create<TModel> = {
        body: obj,
        index: index,
        id: id,
    };
    try {
        var result = await this.client.create(req, {
            ignore:[409]
        });
        if (result.statusCode === 201) {
            return result.body;
        } else {
            console.log("Non succesfull call, result:", result);
            return null;
        }
    } catch (error) {
        console.log("create error", error);
        return null;
    }
}

我的更新功能大致相同

async update(index: string, obj: any, id: string): Promise<TModel> {
    try {
        let req: RequestParams.Update<TModel> = {
            body: obj,
            index: index,
            id: id
        };
        var result = await this.client.update(req);
        if (result.statusCode === 200 || result.statusCode === 201 || result.statusCode == 202 || result.statusCode == 204) {
            return result.body;
        } else {
            console.log("Non succesfull call, result:", result);
            return null;
        }
    } catch (error) {
        console.error("Error updating", error);
    }
}

我开始使用的搜索功能:

async search(index: string, searchBody: any): Promise<any> {

    try {
        var result = await this.client.search({
            index: index,
            body: searchBody
        });
        if (result.statusCode === 200) {
            return result.body.hits.hits;
        } else {
            console.log("Non succesfull call, result:", result);
            return null;
        }
    } catch (error) {
        console.log("Error getting result", error);
        return null;
    }
}

[插入并稍后搜索对象时,您当然会获得any返回类型。了解数据的结构后,我在某处执行以下操作以快速测试:

return result.body.hits.hits[0]._source

哪个给了我这个结果:

尽管对象的JSON格式似乎是正确的,就像我创建的一样,它在更新数据时会引发错误:

因此,我用Google搜索并尝试应用由Elastic自己提供的解决方案:

.html

搜索代码:

async searchTyped(index: string, searchBody: any): Promise<TModel> {
    try {
        let req : RequestParams.Search<TModel> ={
            index : index,
             body : searchBody,
        };
        var result : ApiResponse<SearchResponse<TModel>> = await this.client.search(req);
        if (result.statusCode === 200) {
            if(result.body.hits.hits.length > 0){
                return result.body.hits.hits[0]._source;
            }
            return null;
        } else {
            console.log("Non succesfull call, result:", result);
            return null;
        }
    } catch (error) {
        console.log("Error getting result", error);
        return null;
    }
}

根据智能感知,这应该起作用,_source应该是TModel类型。

不幸的是,没有运气:

我在更新之前要确保数据对象正确无误吗?

我们希望坚持使用动态映射,而不是定义所需的确切模型。我认为使用此设置,请求正文包含javascript Object或打字稿类型并没有关系吗?

回答如下:

最终,不管它是什么对象,我只需要以不同的方式进行更新:

async update(index: string, obj: any, id: string): Promise<any> {
    try {
        let req: RequestParams.Update<any> = {
            body: {
                "doc": obj
            },
            index: index,
            id: id
        };
        var result = await this.client.update(req);
        if (result.statusCode === 200 || result.statusCode === 201 || result.statusCode == 202 || result.statusCode == 204) {
            return result.body;
        } else {
            console.log("Non succesfull call, result:", result);
            return null;
        }
    } catch (error) {
        console.error("Error updating", error);
    }
}

所以所有更新都应该在doc之内,然后一切正常。

在本指南中找到:https://hub.packtpub/crud-create-read-update-delete-operations-elasticsearch/

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论