2015-07-09 18 views
7

में स्क्रॉल उदाहरण मैं लोचदार खोज परिणामों से सभी दस्तावेजों को पुनर्प्राप्त करने के लिए .rom() और .Size() विधियों का उपयोग कर रहा हूं।लोचदार खोज एनईटी एपीआई

ISearchResponse<dynamic> bResponse = ObjElasticClient.Search<dynamic>(s => s.From(0).Size(25000).Index("accounts").AllTypes().Query(Query)); 

हाल ही में मैं लचीला खोजें की पुस्तक सुविधा में आए -

नीचे नमूना उदाहरण है। यह विशेष रूप से बड़े डेटा लाने के लिए() और आकार() विधियों से बेहतर दृष्टिकोण दिखता है।

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html

मैं घोंसला एपीआई में स्क्रॉल सुविधा पर उदाहरण के लिए लग रही।

क्या कोई कृपया उत्तर उदाहरण प्रदान कर सकता है?

धन्यवाद, समीर

उत्तर

4

घोंसला 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); 
} 
+0

धन्यवाद integration test पर एक नज़र ले जा सकते हैं। समेकन क्वेरी क्वेरी प्रकार 'स्कैन' समर्थित नहीं है। तो खोज प्रकार 'स्कैन' के बिना स्क्रॉल का उपयोग करना अभी भी अच्छा है? –

+0

हाँ, लेकिन स्क्रॉल कम कुशल होगा https://www.elastic.co/guide/en/elasticsearch/guide/current/scan-scroll.html#scan-scroll। आपके उपयोग के मामले पर निर्भर करता है। – Rob

संबंधित मुद्दे