Vespa中存在批量检查文件

时间:2019-08-07 14:10:54

标签: yql vespa

我有一个docid的列表,想检查一下Vespa中是否存在它们。如果是这样,请返回该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",
    }

谢谢!

1 个答案:

答案 0 :(得分:2)

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

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

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