python - गणन - हिंदी में मांग की लोच के प्रकार




बल्क एपीआई, स्कैन और स्क्रॉल के माध्यम से लोचदार खोज को फिर से शुरू करना (2)

मैं अपनी लोचदार खोज सेटअप को फिर से अनुक्रमित करने की कोशिश कर रहा हूं, वर्तमान में लोचदार खोज दस्तावेजों को देख रहा हूं और पायथन एपीआई का उपयोग करते हुए एक उदाहरण

मैं थोड़ी सी उलझन में हूँ कि यह सब कैसे काम करता है। मैं पायथन एपीआई से स्क्रॉल आईडी प्राप्त करने में सक्षम था:

es = Elasticsearch("myhost")

index = "myindex"
query = {"query":{"match_all":{}}}
response = es.search(index= index, doc_type= "my-doc-type", body= query, search_type= "scan", scroll= "10m")

scroll_id = response["_scroll_id"]

अब मेरा सवाल है, इसका क्या फायदा है? स्क्रोलिंग आईडी जानने से मुझे क्या फायदा? दस्तावेज़ीकरण "बल्क एपीआई" का उपयोग करने के लिए कहता है, लेकिन मुझे नहीं पता है कि इस में स्कॉल_आईड कारक कैसे होता है, यह थोड़ा भ्रमित था।

क्या कोई भी इस उदाहरण से पुनः निर्देशित कैसे कर सकता है, यह विचार कर सकता है कि मुझे स्क्रॉल_आईडी को सही तरीके से मिला है?


नमस्ते आप सबसे कुशल तरीके से सभी दस्तावेजों के माध्यम से जाने के लिए स्क्रॉल एपीआई का उपयोग कर सकते हैं स्क्रॉल_आईड का उपयोग करके आप एक विशिष्ट सत्र अनुरोध के लिए सर्वर पर संग्रहीत एक सत्र पा सकते हैं। तो आपको अधिक आइटम प्राप्त करने के लिए प्रत्येक अनुरोध के साथ स्क्रॉल_आईडी प्रदान करने की आवश्यकता है।

थोक एपीआई अधिक कुशल अनुक्रमण दस्तावेजों के लिए है। जब कॉपी और इंडेक्स आपको दोनों की ज़रूरत है, लेकिन वे वास्तव में संबंधित नहीं हैं

मेरे पास कुछ जावा कोड है जो आपको बेहतर तरीके से काम करने के लिए मदद कर सकता है।

    public void reIndex() {
    logger.info("Start creating a new index based on the old index.");

    SearchResponse searchResponse = client.prepareSearch(MUSIC_INDEX)
            .setQuery(matchAllQuery())
            .setSearchType(SearchType.SCAN)
            .setScroll(createScrollTimeoutValue())
            .setSize(SCROLL_SIZE).execute().actionGet();

    BulkProcessor bulkProcessor = BulkProcessor.builder(client,
            createLoggingBulkProcessorListener()).setBulkActions(BULK_ACTIONS_THRESHOLD)
            .setConcurrentRequests(BULK_CONCURRENT_REQUESTS)
            .setFlushInterval(createFlushIntervalTime())
            .build();

    while (true) {
        searchResponse = client.prepareSearchScroll(searchResponse.getScrollId())
                .setScroll(createScrollTimeoutValue()).execute().actionGet();

        if (searchResponse.getHits().getHits().length == 0) {
            logger.info("Closing the bulk processor");
            bulkProcessor.close();
            break; //Break condition: No hits are returned
        }

        for (SearchHit hit : searchResponse.getHits()) {
            IndexRequest request = new IndexRequest(MUSIC_INDEX_NEW, hit.type(), hit.id());
            request.source(hit.sourceRef());
            bulkProcessor.add(request);
        }
    }
}

इस समस्या में चलने वाले किसी भी व्यक्ति के लिए, आप पायथन क्लाइंट से निम्न एपीआई का उपयोग रीनडेक्स के लिए कर सकते हैं:

https://elasticsearch-py.readthedocs.org/en/master/helpers.html#elasticsearch.helpers.reindex

यह आपको स्क्रॉल करने और सभी डेटा प्राप्त करने और नए सूचकांक में डेटा रखने के लिए थोक एपीआई का उपयोग करने से बचने में मदद करेगा।







elasticsearch-bulk-api