フォルダ内のドキュメントがほとんどないので、このフォルダ内のすべてのドキュメントにインデックスが付けられているかどうかを確認したいと思います。そのために、フォルダー内のドキュメント名ごとに、ESでインデックス付けされたドキュメントのループを実行して比較します。だから私はすべてのドキュメントを取得したいと思います。
(ElasticSearch)NESTクエリのすべてのレコードを取得する および ここにリンクの説明を入力 のように、同じ質問の重複の可能性は他にほとんどありませんが、ドキュメントが変更されたため、役に立ちませんでしたその時から(現在のドキュメントにはスキャンについては何もありません)
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();