`import { CategoryModel } from '../../craft-my-plate-api-lambda/models/categoryModel/category-model';
import { DefaultPlatterModel } from '../../craft-my-plate-api-lambda/models/defaultPlatesModels/default-platters-model';
import { ItemsModel } from '../../craft-my-plate-api-lambda/models/itemsModel/items-model';
import { SearchRequest } from './search-types';
const { Client } = require('@opensearch-project/opensearch');
import { ES_SEARCH_URL } from '../../craft-my-plate-api-lambda/utils/config';
const AWS = require('aws-sdk');
const createAwsOpensearchConnector = require('aws-opensearch-connector');
AWS.config.update({
profile: "default",
});
export class OpenSearchAPI {
client = new Client({
...createAwsOpensearchConnector(AWS.config),
node: "https://search-search-dev-gmsrdtjjhczl6vc2fjtdqkdgiu.ap-south-1.es.amazonaws.com",
});
async searchForItem(request: SearchRequest) {
let response = await this.client.Search({
index: 'item-index',
size: 10,
_source: ["itemId", "itemName", "itemImagesUrl", "itemCategory", "itemCategoryId", "itemType"],
body: {
query: {
bool: {
must: [
{
match: {
itemName: {
query: request.searchTerm,
fuzziness: "AUTO"
}
}
}
],
filter: [
{
term: {
itemLocation: request.location
}
},
{
term: {
itemActive: "Active"
}
}
]
}
}
}
});
return response.body.hits.hits;
}
}
类型错误:无法读取未定义的属性(读取“搜索”)
我尝试以多种方式改变我定义客户端的方式。我同时使用了 client.search 和 client.Search,但两者都给出了相同的错误。我可以添加文档,但搜索不起作用。有什么建议吗?
您应该遵循 opensearch-js 用户指南,并按如下方式实例化客户端:
const client = new Client({
...AwsSigv4Signer({
region: 'ap-south-1',
service: 'es',
getCredentials: () =>
new Promise((resolve, reject) => {
AWS.config.getCredentials((err, credentials) => {
if (err) {
reject(err);
} else {
resolve(credentials);
}
});
}),
}),
node: "https://search-search-dev-gmsrdtjjhczl6vc2fjtdqkdgiu.ap-south-1.es.amazonaws.com"
});