elasticsearch 使用@elastic/enterprise-search通过NodeJs中的文档ID列表查询 meta引擎

mnemlml8  于 2023-05-06  发布在  ElasticSearch
关注(0)|答案(1)|浏览(168)

在我的NodeJs API中,我还没有查询到由多个单引擎组成的** meta引擎**。我需要一个身份列表来过滤文件。
我用的是**@elastic/enterprise-search**包版本8.6.0
当我尝试列出它工作的所有文档时,我得到了所有的文档。但我没能通过身份证。
我尝试使用客户端方法getDocuments(),但它没有找到任何东西,并返回一个空值列表。我尝试了这样的方法,但仍然会出现错误:

const { Client } = require('@elastic/enterprise-search');

const client = () =>
    new Client({
        url: process.env.ELASTIC_SEARCH_URL,
        auth: {
            token: process.env.ELASTIC_SEARCH_KEY,
        },
    });

const searchItemsFromMetaEngineAppSearch = async (engine, idList) => {
    const requests = idList.map((id) => {
        return {
            index: engine,
            body: {
                query: {
                    ids: {
                        values: [id],
                    },
                },
            },
        };
    });

    const documents = await client().app.search({
        body: requests,
    });
    return documents;
};

在网络上没有太多关于查询 meta引擎的信息。

vfwfrxfs

vfwfrxfs1#

meta引擎中元素的id与单个引擎中元素的id不同。
在单个引擎中,你会做这样的事情:

const documents = await client().app.getDocuments({
     engineName: engine, 
     ids: [ "id" ]
});

在 meta引擎中,必须使用“作用域ID”(“{engine}|{id}”),使用它们所属的引擎的名称:

const documents = await client().app.getDocuments({
     engineName: engine, 
     ids: [ "engineName|id" ]
});

(https://www.elastic.co/guide/en/app-search/current/meta-engines-guide.html#meta-engines-guide-scoped-ids)

相关问题