簡體   English   中英

批量搜索文檔彈性搜索

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM