批量检查文档在 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 程序的相同代码。
我有一个 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 程序的相同代码。