首页 > 解决方案 > 批量检查 Vespa 中的文档是否存在

问题描述

我有一个列表docid并想检查它们是否存在于 Vespa 中。如果是,则返回 that 的特定字段docid。目前,我正在按顺序执行此操作。Python中的示例代码:

import requests
doc_urlbase = 'http://localhost:8080/document/v1/test/test'
docid_list = [1,2,3,4,5]
for docid in docid_list:
    doc_url = '{}/{}'.format(doc_urlbase, i)
    req = requests.get(doc_url)
    if req.status_code == 200:
        # docid is in Vespa, save the field value
    else:
        # display not found

我希望有更好的方法来做到这一点,并返回一个数组/映射作为结果。就像是:

Query given:
    docid_list = [1,2,3,4,5]

Return:
    {
        1: "field value",
        2: "field value",
        3: "",             # not in Vespa
        4: "field value",
        5: "field value",
    }

谢谢!

标签: yqlvespa

解决方案


如果您的列表相对于语料库很大,您可以使用 vespa-visit 快速转储所有id,然后匹配集合

我认为情况并非如此。如果您经常这样做,您可以创建一个像 Searcher 或 Handler 这样的组件,您可以将 id 列表发布到该组件。在 Component 中,使用Java Document API获取每个 ID,并为每个匹配项创建一个 Hit。每个这样的 Get 都将在 ms 范围内,因此会更快 - 您将不得不编写一些代码进行权衡。

您还可以从独立的 Java 程序运行相同的代码。


推荐阅读