घोंसला Reindex
के आंतरिक कार्यान्वयन पुस्तक का उपयोग करता है एक सूचकांक से दूसरे दस्तावेजों स्थानांतरित करने के लिए।
यह अच्छा प्रारंभिक बिंदु होना चाहिए।
नीचे आप github से कोड के लिए दिलचस्प पा सकते हैं।
var page = 0;
var searchResult = this.CurrentClient.Search<T>(
s => s
.Index(fromIndex)
.AllTypes()
.From(0)
.Size(size)
.Query(this._reindexDescriptor._QuerySelector ?? (q=>q.MatchAll()))
.SearchType(SearchType.Scan)
.Scroll(scroll)
);
if (searchResult.Total <= 0)
throw new ReindexException(searchResult.ConnectionStatus, "index " + fromIndex + " has no documents!");
IBulkResponse indexResult = null;
do
{
var result = searchResult;
searchResult = this.CurrentClient.Scroll<T>(s => s
.Scroll(scroll)
.ScrollId(result.ScrollId)
);
if (searchResult.Documents.HasAny())
indexResult = this.IndexSearchResults(searchResult, observer, toIndex, page);
page++;
} while (searchResult.IsValid && indexResult != null && indexResult.IsValid && searchResult.Documents.HasAny());
इसके अलावा, आप के लिए Scroll
[Test]
public void SearchTypeScan()
{
var scanResults = this.Client.Search<ElasticsearchProject>(s => s
.From(0)
.Size(1)
.MatchAll()
.Fields(f => f.Name)
.SearchType(SearchType.Scan)
.Scroll("2s")
);
Assert.True(scanResults.IsValid);
Assert.False(scanResults.FieldSelections.Any());
Assert.IsNotNullOrEmpty(scanResults.ScrollId);
var results = this.Client.Scroll<ElasticsearchProject>(s=>s
.Scroll("4s")
.ScrollId(scanResults.ScrollId)
);
var hitCount = results.Hits.Count();
while (results.FieldSelections.Any())
{
Assert.True(results.IsValid);
Assert.True(results.FieldSelections.Any());
Assert.IsNotNullOrEmpty(results.ScrollId);
var localResults = results;
results = this.Client.Scroll<ElasticsearchProject>(s=>s
.Scroll("4s")
.ScrollId(localResults.ScrollId));
hitCount += results.Hits.Count();
}
Assert.AreEqual(scanResults.Total, hitCount);
}
धन्यवाद integration test पर एक नज़र ले जा सकते हैं। समेकन क्वेरी क्वेरी प्रकार 'स्कैन' समर्थित नहीं है। तो खोज प्रकार 'स्कैन' के बिना स्क्रॉल का उपयोग करना अभी भी अच्छा है? –
हाँ, लेकिन स्क्रॉल कम कुशल होगा https://www.elastic.co/guide/en/elasticsearch/guide/current/scan-scroll.html#scan-scroll। आपके उपयोग के मामले पर निर्भर करता है। – Rob