用于检索所有记录的 Elasticsearch 搜索查询 NEST
Elasticsearch search query to retrieve all records NEST
我的文件夹中的文档很少,我想检查该文件夹中的所有文档是否都已编入索引。为此,对于文件夹中的每个文档名称,我想通过循环 运行 对在 ES 中索引的文档进行比较。所以我想检索所有文件。
同一个问题几乎没有其他可能重复的问题,例如 retrieve all records in a (ElasticSearch) NEST query and enter link description here,但它们对我没有帮助,因为文档已经从那时起发生了变化。(当前文档中没有关于扫描的内容)
我尝试使用 client.search<T>()
。但根据文档,默认检索 10 个结果。我想获取所有记录而不提及记录的大小? (因为索引大小变化)
或者是否可以先获取索引的大小,然后将此数字作为输入发送到大小以获取所有文档并循环遍历?
这是我解决问题的方法。希望这可以帮助。 (参考文献https://www.elastic.co/guide/en/elasticsearch/client/net-api/1.x/scroll.html , https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html#scroll-search-context)
List<string> indexedList = new List<string>();
var scanResults = client.Search<ClassName>(s => s
.From(0)
.Size(2000)
.MatchAll()
.Fields(f=>f.Field(fi=>fi.propertyName)) //I used field to get only the value I needed rather than getting the whole document
.SearchType(Elasticsearch.Net.SearchType.Scan)
.Scroll("5m")
);
var results = client.Scroll<ClassName>("10m", scanResults.ScrollId);
while (results.Documents.Any())
{
foreach(var doc in results.Fields)
{
indexedList.Add(doc.Value<string>("propertyName"));
}
results = client.Scroll<ClassName>("10m", results.ScrollId);
}
编辑
var response = client.Search<Document>(s => s
.From(fromNum)
.Size(PageSize)
.Query(q => q ....
您可以轻松地执行以下操作来获取索引中的所有记录:
var searchResponse = client.Search<T>(s => s
.Index("IndexName")
.Query(q => q.MatchAll()
)
);
var documents = searchResponse.Documents.Select(f => f.fieldName).ToList();
我的文件夹中的文档很少,我想检查该文件夹中的所有文档是否都已编入索引。为此,对于文件夹中的每个文档名称,我想通过循环 运行 对在 ES 中索引的文档进行比较。所以我想检索所有文件。
同一个问题几乎没有其他可能重复的问题,例如 retrieve all records in a (ElasticSearch) NEST query and enter link description here,但它们对我没有帮助,因为文档已经从那时起发生了变化。(当前文档中没有关于扫描的内容)
我尝试使用 client.search<T>()
。但根据文档,默认检索 10 个结果。我想获取所有记录而不提及记录的大小? (因为索引大小变化)
或者是否可以先获取索引的大小,然后将此数字作为输入发送到大小以获取所有文档并循环遍历?
这是我解决问题的方法。希望这可以帮助。 (参考文献https://www.elastic.co/guide/en/elasticsearch/client/net-api/1.x/scroll.html , https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html#scroll-search-context)
List<string> indexedList = new List<string>();
var scanResults = client.Search<ClassName>(s => s
.From(0)
.Size(2000)
.MatchAll()
.Fields(f=>f.Field(fi=>fi.propertyName)) //I used field to get only the value I needed rather than getting the whole document
.SearchType(Elasticsearch.Net.SearchType.Scan)
.Scroll("5m")
);
var results = client.Scroll<ClassName>("10m", scanResults.ScrollId);
while (results.Documents.Any())
{
foreach(var doc in results.Fields)
{
indexedList.Add(doc.Value<string>("propertyName"));
}
results = client.Scroll<ClassName>("10m", results.ScrollId);
}
编辑
var response = client.Search<Document>(s => s
.From(fromNum)
.Size(PageSize)
.Query(q => q ....
您可以轻松地执行以下操作来获取索引中的所有记录:
var searchResponse = client.Search<T>(s => s
.Index("IndexName")
.Query(q => q.MatchAll()
)
);
var documents = searchResponse.Documents.Select(f => f.fieldName).ToList();