批量检查文档在 Vespa 中是否存在

Batch check document existence in Vespa

我有一个 docid 的列表,想检查它们是否存在于 Vespa 中。如果是这样,return 那个 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

我希望有更好的方法,结果 return array/map。类似于:

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",
    }

谢谢!

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

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

您也可以 运行 来自独立 Java 程序的相同代码。