Пакетная проверка наличия документа в 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",
    }

Спасибо!


person user2131907    schedule 07.08.2019    source источник


Ответы (1)


Если ваш список велик по сравнению с корпусом, вы можете использовать vespa-visit, чтобы быстро вывести все идентификаторы, а затем сопоставить наборы.

Я предполагаю, что это не так. Если вы делаете это часто, вы можете создать компонент, такой как Searcher или Handler, в который вы POST список идентификаторов. В компоненте используйте Java Document API для получения каждого идентификатора и создать Hit для каждого матча. Каждый такой Get будет находиться в диапазоне мс, поэтому будет быстрее - в качестве компромисса вам придется написать некоторый код.

Вы также можете запустить тот же код из отдельной программы Java.

person Kristian Aune    schedule 08.08.2019