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/