[英]batch search for documents elastic search
我正在使用此無希望的低效率代碼來確定文檔是否已被索引:
foreach (var entry in dic)
{
var response = client.Search<Document>(s => s.Query(q => q.QueryString(d =>
d.Query(string.Format("{0}", entry.Key)))));
if (response.Documents.Count == 0)
{
not_found++;
}
else
{
found++;
}
}
我想知道,是否可以批量發送多個entry.Key而不是為每個id(entry.Key)擊中端點? 謝謝。
當然!
您可以使用terms
過濾器:
client.Search<Document>(s => s.Query(
q => q.Terms(
c => c
.Field(doc => doc.Id)
.Terms(keys)))
如果您要專門尋找ID,可以使用ids
過濾器:
client.Search<Document>(s => s.Query(
q => q.Ids(c => c.Values(keys))
);
如果僅對是否已為文檔建立索引感興趣,請考慮將返回的字段限制為僅ID字段,這樣您就不會浪費帶寬返回完整的文檔:
response = client.Search<Document>(s => s
.Query(q => q.Ids(c => c.Values(keys)) // look for these IDs
.StoredFields(sf => sf.Fields(doc => doc.Id)) // return only the Id field
);
最后,如果您只對匹配文檔的數量感興趣,則可以要求Elasticsearch不返回任何結果,而僅使用響應元數據來計算匹配的文檔數量:
response = client.Search<Document>(s => s
.Query(q => q.Ids(c => c.Values(keys))) // look for these IDs
.Size(0) // return 0 hits
);
found += response.Total; // number of total hits
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.