使用无服务器 aws 的 OpenSearch 客户端变得未定义

问题描述 投票:0回答:1
`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,但两者都给出了相同的错误。我可以添加文档,但搜索不起作用。有什么建议吗?

typescript amazon-web-services aws-sdk aws-serverless amazon-opensearch
1个回答
0
投票

您应该遵循 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"
});
© www.soinside.com 2019 - 2024. All rights reserved.