সমস্ত রেকর্ড ফিরিয়ে দিতে ইলাস্টিক অনুসন্ধান অনুসন্ধান


490

ইলাস্টিকসर्चে আমার একটি ছোট ডাটাবেস রয়েছে এবং পরীক্ষার উদ্দেশ্যে সমস্ত রেকর্ডটি আবার টানতে চাই। আমি ফর্মটির একটি ইউআরএল ব্যবহার করার চেষ্টা করছি ...

http://localhost:9200/foo/_search?pretty=true&q={'matchAll':{''}}

আপনি যে URL টি এটি সম্পাদন করতে ব্যবহার করবেন তা আমাকে কেউ দিতে পারেন, দয়া করে?


1
... যেখানে "ফু" হ'ল সূচিটির নাম যেখানে আপনি সমস্ত রেকর্ড প্রদর্শন করতে চান।
জোনাটান

উত্তর:


744

আমি লুসিন সিনট্যাক্স তাই সমর্থিত বলে মনে করি:

http://localhost:9200/foo/_search?pretty=true&q=*:*

আকার ডিফল্ট 10 এ, সুতরাং আপনার &size=BIGNUMBER10 টিরও বেশি আইটেমের প্রয়োজন হতে পারে । (যেখানে বিগ নম্বর আপনার ডেটাসেটের চেয়ে বড় বলে মনে করেন এমন সংখ্যার সমান হয়)

কিন্তু, স্থিতিস্থাপক দস্তাবেজগুলি স্ক্যান অনুসন্ধান প্রকারটি ব্যবহার করে বড় ফলাফলের সেটগুলির জন্য পরামর্শ দেয়

উদাহরণ:

curl -XGET 'localhost:9200/foo/_search?search_type=scan&scroll=10m&size=50' -d '
{
    "query" : {
        "match_all" : {}
    }
}'

এবং তারপরে উপরের ডকুমেন্টেশন লিঙ্ক অনুসারে অনুরোধ জানাতে থাকুন।

সম্পাদনা: scan২.১.০ এ অবচয়

scanscrollঅনুসারে বাছাই করা নিয়মিত অনুরোধের মাধ্যমে কোনও সুবিধা সরবরাহ করে না _docইলাস্টিক ডক্সের লিঙ্ক (@ ক্রিস্টোফ-রাউসি দ্বারা চিহ্নিত)


6
ধন্যবাদ। এটিই চূড়ান্ত ছিল যে আমি এখনই যা ফিরিয়ে আনব তা নিয়ে এসেছি ... লোকালহোস্ট: 9200 / foo / _ অনুসন্ধান? আকার = 50 এবং সুন্দর = সত্য এবং কিউ = *: *
জন লিভারমোর

2
@ স্টিভের উত্তরে যুক্ত করে, আপনি এই লিঙ্কটিতে স্থিতিস্থাপক
কার্তিক

1
আপনার উত্তরের জন্য @ স্টিভ ধন্যবাদ আমি মনে করি না যে এটি একটি নতুন প্রশ্নের পক্ষে যথেষ্ট তাৎপর্যপূর্ণ। এটি স্পষ্টভাবে কোথাও বলা হয়নি, তাই আমি অনুভব করেছি যে আমি এখানে যাচাই করার জন্য জিজ্ঞাসা করেছি।
চুরো

8
আপনার সত্যই স্ক্যান + স্ক্রোল-অনুরোধগুলি ব্যবহার করা উচিত। আপনি যদি আকার = BIGNUMBER ব্যবহার করেন তবে নোট করুন যে লুসিন সেই সংখ্যাটির জন্য মেমরির বরাদ্দ করে, তাই এটিকে অত্যধিক পরিমাণে বড় করবেন না। :)
অ্যালেক্স ব্র্যাসেটভিক


137
http://127.0.0.1:9200/foo/_search/?size=1000&pretty=1
                                   ^

আকারের প্যারামটি নোট করুন , যা ডিফল্ট (10) থেকে শারড প্রতি 1000 এ প্রদর্শিত হিটগুলি বাড়িয়ে তোলে।

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-from-size.html


10
যদিও একটি বিষয় মনে রাখতে হবে (ইলাস্টিকস্যাচ ডকস থেকে): নোট করুন যে + আকারটি সূচক থেকে 10,000 এর চেয়ে বেশি হতে পারে সূচি.ম্যাক্স_রেসাল্ট_উন্ডো সূচী সেটিং এর চেয়ে বেশি হতে পারে না।
ব্যবহারকারী 3078523

2
এটি 1000 নয়, সমস্ত নয়, 303078523 আসবে, এই পদ্ধতির একটি সীমা রয়েছেmax_result_window
স্টিলিওস

1
এটির সর্বাধিক, এবং এটিও (যদি আপনার কাছে হাজার হাজার রেকর্ড থাকে) তবে এটি সর্বাধিকের দিকে এগিয়ে যাওয়ার পক্ষে একটি অদ্ভুত ভারী পদ্ধতির। পরিবর্তে আপনার "স্ক্রোল" ক্যোরি ব্যবহার করা উচিত।
হ্যারি উড

37

ইলাস্টিকসার্ক (ইএস) ইএস ক্লাস্টার সূচক থেকে ডেটা পাওয়ার জন্য জিইটি বা পোষ্ট উভয় অনুরোধ সমর্থন করে।

যখন আমরা একটি জিইটি করি:

http://localhost:9200/[your index name]/_search?size=[no of records you want]&q=*:*

যখন আমরা একটি পোস্ট করি:

http://localhost:9200/[your_index_name]/_search
{
  "size": [your value] //default 10
  "from": [your start index] //default 0
  "query":
   {
    "match_all": {}
   }
}   

আমি ইলাস্টিকসার্চ সহ একটি ইউআই প্লাগইন ব্যবহার করার পরামর্শ দেব http://mobz.github.io/elasticsearch-head/ এটি আপনাকে তৈরি সূচকগুলির আরও ভাল অনুভূতি পেতে এবং আপনার সূচকগুলি পরীক্ষা করতে সহায়তা করবে।


3
অন্য একজন ব্যবহারকারী যেমন উল্লেখ করেছেন: from+ সূচক সেটিংয়ের sizeচেয়ে বেশি হতে পারে index.max_result_windowযা 10,000 এ ডিফল্ট হয়
স্টিলিওস

এই পদ্ধতির সর্বাধিক রয়েছে এবং এটিও (যদি আপনার কাছে হাজার হাজার রেকর্ড থাকে) তবে এটি সর্বাধিকের দিকে এগিয়ে যাওয়ার পক্ষে একটি অদ্ভুত ভারী পদ্ধতির। পরিবর্তে আপনার একটি "স্ক্রোল" ক্যোয়ারী ব্যবহার করা উচিত
হ্যারি উড

অদ্ভুতভাবে যথেষ্ট, সরকারী দস্তাবেজগুলি দেখায় curl -XGET ... -d '{...}'যা unঅনুরোধের একটি সরকারী মিশ্র শৈলী। সঠিক জিইটি এবং পোষ্ট ফর্ম্যাটগুলি দেখানোর জন্য আপনাকে ধন্যবাদ।
জেসি চিশলম

28

দ্রষ্টব্য: উত্তরটি ইলাস্টিকসার্কের পুরানো সংস্করণের সাথে সম্পর্কিত 0.90। তখন থেকে প্রকাশিত সংস্করণগুলিতে একটি আপডেট বাক্য গঠন রয়েছে। দয়া করে অন্যান্য উত্তরগুলি উল্লেখ করুন যা আপনি সন্ধান করছেন সর্বশেষ উত্তরের আরও সঠিক উত্তর সরবরাহ করতে পারে।

নীচের ক্যোয়ারীটি আপনাকে ফিরিয়ে দিতে চান এমন NO_OF_RESULTS ফিরিয়ে দেবে ..

curl -XGET 'localhost:9200/foo/_search?size=NO_OF_RESULTS' -d '
{
"query" : {
    "match_all" : {}
  }
}'

এখন, এখানে প্রশ্ন হ'ল আপনি চান যে সমস্ত রেকর্ড ফিরিয়ে দেওয়া হোক। স্বাভাবিকভাবেই, কোনও ক্যোয়ারী লেখার আগে আপনি কোনও নম্বরটির মান জানবেন না

আমরা কীভাবে জানতে পারি যে আপনার নথিতে কয়টি রেকর্ড রয়েছে? কেবল নীচে কোয়েরি টাইপ করুন

curl -XGET 'localhost:9200/foo/_search' -d '

এটি আপনাকে এমন একটি ফলাফল দেবে যা নীচের মত দেখাচ্ছে

 {
hits" : {
  "total" :       2357,
  "hits" : [
    {
      ..................

ফলাফল মোট আপনাকে জানায় যে আপনার নথিতে কতগুলি রেকর্ড উপলব্ধ। সুতরাং, এটি NO_OF ফলাফলের মান জানার একটি দুর্দান্ত উপায়

curl -XGET 'localhost:9200/_search' -d ' 

সমস্ত সূচকগুলিতে সমস্ত ধরণের অনুসন্ধান করুন

curl -XGET 'localhost:9200/foo/_search' -d '

Foo সূচীতে সব ধরণের অনুসন্ধান করুন

curl -XGET 'localhost:9200/foo1,foo2/_search' -d '

Foo1 এবং foo2 সূচকগুলিতে সমস্ত ধরণের অনুসন্ধান করুন

curl -XGET 'localhost:9200/f*/_search

এফ থেকে শুরু করে যে কোনও সূচকে সমস্ত প্রকারের সন্ধান করুন

curl -XGET 'localhost:9200/_all/type1,type2/_search' -d '

সমস্ত সূচকগুলিতে অনুসন্ধানের প্রকারের ব্যবহারকারী এবং টুইট


9
ডিফল্টরূপে ES বেস ফলাফলের সাথে কোনও আকারের পরম অন্তর্ভুক্ত না করা পর্যন্ত 10 টি ফলাফল ফিরিয়ে দেবে।
lfender6445

আগের প্রতিক্রিয়াটি তিন বছরের ছিল। এটি বর্তমানের সাথে আপডেট হয়েছে।
ভিজপ্যান্ডিয়ান

19

পাইথন ক্লায়েন্ট ব্যবহার করে এটি পাওয়া যায় এমন সেরা সমাধান

  # Initialize the scroll
  page = es.search(
  index = 'yourIndex',
  doc_type = 'yourType',
  scroll = '2m',
  search_type = 'scan',
  size = 1000,
  body = {
    # Your query's body
    })
  sid = page['_scroll_id']
  scroll_size = page['hits']['total']

  # Start scrolling
  while (scroll_size > 0):
    print "Scrolling..."
    page = es.scroll(scroll_id = sid, scroll = '2m')
    # Update the scroll ID
    sid = page['_scroll_id']
    # Get the number of results that we returned in the last scroll
    scroll_size = len(page['hits']['hits'])
    print "scroll size: " + str(scroll_size)
    # Do something with the obtained page

https://gist.github.com/drorata/146ce50807d16fd4a6aa

জাভা ক্লায়েন্ট ব্যবহার

import static org.elasticsearch.index.query.QueryBuilders.*;

QueryBuilder qb = termQuery("multi", "test");

SearchResponse scrollResp = client.prepareSearch(test)
        .addSort(FieldSortBuilder.DOC_FIELD_NAME, SortOrder.ASC)
        .setScroll(new TimeValue(60000))
        .setQuery(qb)
        .setSize(100).execute().actionGet(); //100 hits per shard will be returned for each scroll
//Scroll until no hits are returned
do {
    for (SearchHit hit : scrollResp.getHits().getHits()) {
        //Handle the hit...
    }

    scrollResp = client.prepareSearchScroll(scrollResp.getScrollId()).setScroll(new TimeValue(60000)).execute().actionGet();
} while(scrollResp.getHits().getHits().length != 0); // Zero hits mark the end of the scroll and the while loop.

https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-search-scrolling.html


থ্যাঙ্কস মার্ক, আমি ঠিক তাই খুঁজছিলাম! আমার ক্ষেত্রে (ELK 6.2.1, অজগর 3), অনুসন্ধান_প্রকারের যুক্তিটি বৈধ ছিল না এবং ELK 6.0
ক্রিস্টোফ শরণজ

নিখুঁত সমাধান! ধন্যবাদ। আমি ব্যবহার করছিলাম elasticsearch_dsl==5.4.0এবং এটি ছাড়াও কাজ করে search_type = 'scan',
উসমান মকবুল

ES 6.3। এই উদাহরণটি আমার ইলাস্টিক সার্চ পরিষেবাটি ক্র্যাশ হয়ে যায়, ১১০ কে ডকুমেন্ট সহ size=100005 ম 7 ম পুনরুক্তির মধ্যে কোথাও স্ক্রোল করার চেষ্টা করে । সঙ্গে status=127, main ERROR Null object returned for RollingFile in Appenders, main ERROR Unable to locate appender "rolling" for logger config "root"কোন লগ/var/log/elasticsearch/elasticsearch.log
stelios

রেকর্ডের জন্য, পাইথন ক্লায়েন্টরা একটি scanহেল্পার্স প্রয়োগ করে - যা হুডের নীচে স্ক্রোল করে (লিট-এর সংস্করণ 5.XX)
এমসিএমজেডএল

search_type = 'scan'অবচয় করা হয়। অনুরূপ কোড ব্যতীত কাজ করবে, যদিও কিছু আকর্ষণীয় পার্থক্য রয়েছে যা পুরাতন ডকুমেন্টেশনে ভালভাবে সমাহিত হয়েছে। elastic.co/guide/en/elasticsearch/references/1.4/… বিশেষত, সন্ধান_প্রকার = স্ক্যান ব্যবহার না করার জন্য স্থানান্তরিত করার সময়, প্রথম 'অনুসন্ধান' ক্যোয়ারী ফলাফলের প্রথম ব্যাচের সাথে উপস্থিত হবে।
হ্যারি উড

12

ইলাস্টিকসার্চটি উল্লেখযোগ্য ধীর পাবে আপনি যদি আকার হিসাবে কিছু বড় সংখ্যা যোগ করেন তবে সমস্ত নথি পেতে স্ক্যান এবং স্ক্রোল আইডি ব্যবহার করার জন্য একটি পদ্ধতি।

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

ইলাস্টিকসার্চ ভি 7.2-তে, আপনি এটি এর মতো করুন:

POST /foo/_search?scroll=1m
{
    "size": 100,
    "query": {
        "match_all": {}
    }
}

এর ফলাফলগুলিতে একটি _ স্ক্রোল_আইড থাকবে যা আপনাকে পরবর্তী 100 টি অংশ পেতে জিজ্ঞাসা করতে হবে।

POST /_search/scroll 
{
    "scroll" : "1m", 
    "scroll_id" : "<YOUR SCROLL ID>" 
}

1
এই উত্তরের আরও আপডেট দরকার। search_type=scanএখন অবচয় করা হয়েছে। সুতরাং আপনার এটি অপসারণ করা উচিত, তবে তারপরে আচরণটি একটু বদলে গেছে। প্রথম ব্যাচের ডেটা প্রাথমিক অনুসন্ধান কল থেকে ফিরে আসে। আপনার দেওয়া লিঙ্কটি এটি করার সঠিক উপায়টি দেখায়।
হ্যারি উড

1
আমার মন্তব্যটি সত্যিই লক্ষ্য করা গেল যে আপনি আকার হিসাবে কোনও সংখ্যা যুক্ত করতে পারবেন না, কারণ এটি বেশ ধীর হবে। তাই আমি কোড উদাহরণটি সরিয়েছি এবং লোকেরা সঠিক কোড পেতে লিঙ্কটি অনুসরণ করতে পারে।
উডিডিআরএন

1
@ ওউডিডিআরএন আপনার উত্তরে কোডটি রাখা ভাল (এটি পুরানো হয়ে গেলেও) সুতরাং লিঙ্কটি মারা যাওয়ার পরে এটি উপলব্ধ থাকে।
ট্রাইপড

11

server:9200/_statsআপনার সমস্ত এলিয়াস সম্পর্কে পরিসংখ্যান পাওয়ার জন্যও ব্যবহার করুন .. যেমন প্রতি ও ওরফে প্রতি উপাদানগুলির আকার এবং এটি খুব দরকারী এবং সহায়ক তথ্য সরবরাহ করে


2
তবে, আমি যা মনে করি তা থেকে, ES কেবলমাত্র অনুরোধ অনুযায়ী 16000 ডেটা পাওয়ার অনুমতি দেয়। সুতরাং যদি ডেটা 16000 এর উপরে হয় তবে এই সমাধানটি যথেষ্ট নয়।
আমিনাহ নুরাইনি

10

আপনি যদি হাজার হাজার রেকর্ড টানতে চান তবে ... কয়েকজন লোক 'স্ক্রোল' ব্যবহারের সঠিক উত্তর দিয়েছেন (দ্রষ্টব্য: কিছু লোক "অনুসন্ধান_প্রকার = স্ক্যান" ব্যবহার করার পরামর্শও দিয়েছিল This এটি অবচয় করা হয়েছিল এবং v5.0 এ সরানো হয়েছে। আপনার দরকার নেই)

একটি 'অনুসন্ধান' ক্যোয়ারী দিয়ে শুরু করুন, তবে একটি 'স্ক্রোল' পরামিতি নির্দিষ্ট করে (এখানে আমি 1 মিনিটের সময়সীমা ব্যবহার করছি):

curl -XGET 'http://ip1:9200/myindex/_search?scroll=1m' -d '
{
    "query": {
            "match_all" : {}
    }
}
'

এটিতে হিটগুলির প্রথম আপনার 'ব্যাচ' অন্তর্ভুক্ত রয়েছে। তবে আমাদের এখানে করা হয়নি। উপরের কার্ল কমান্ডের আউটপুটটি এরকম কিছু হবে:

{ "_Scroll_id": "c2Nhbjs1OzUyNjE6NU4tU3BrWi1UWkNIWVNBZW43bXV3Zzs1Mzc3OkhUQ0g3VGllU2FhemJVNlM5d2t0alE7NTI2Mjo1Ti1TcGtaLVRaQ0hZU0FlbjdtdXdnOzUzNzg6SFRDSDdUaWVTYWF6YlU2Uzl3a3RqUTs1MjYzOjVOLVNwa1otVFpDSFlTQWVuN211d2c7MTt0b3RhbF9oaXRzOjIyNjAxMzU3Ow ==", "নেন": 109, "timed_out": মিথ্যা, ": _ shards": { "মোট": 5, "সফল": 5, 'ব্যর্থ ": 0}," হিট " : { "মোট": 22601357, "max_score": 0.0, "হিট": []}}

আপনার নিম্নলিখিত কমান্ডটি চালানো উচিত হিসাবে পরবর্তী হিসাবে _সক্রোল_আইডি করা আপনার পক্ষে গুরুত্বপূর্ণ:

    curl -XGET  'localhost:9200/_search/scroll'  -d'
    {
        "scroll" : "1m", 
        "scroll_id" : "c2Nhbjs2OzM0NDg1ODpzRlBLc0FXNlNyNm5JWUc1" 
    }
    '

তবে স্ক্রোল_আইডি চারপাশে পাস করা ম্যানুয়ালি করার মতো কোনও ডিজাইন নয়। আপনার সেরা বাজি কোডটি কোড করার জন্য তা করা। যেমন জাভা:

    private TransportClient client = null;
    private Settings settings = ImmutableSettings.settingsBuilder()
                  .put(CLUSTER_NAME,"cluster-test").build();
    private SearchResponse scrollResp  = null;

    this.client = new TransportClient(settings);
    this.client.addTransportAddress(new InetSocketTransportAddress("ip", port));

    QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();
    scrollResp = client.prepareSearch(index).setSearchType(SearchType.SCAN)
                 .setScroll(new TimeValue(60000))                            
                 .setQuery(queryBuilder)
                 .setSize(100).execute().actionGet();

    scrollResp = client.prepareSearchScroll(scrollResp.getScrollId())
                .setScroll(new TimeValue(timeVal))
                .execute()
                .actionGet();

এখন সর্বশেষ কমান্ডের লুপ অবধি অনুসন্ধানের জন্য অনুসন্ধানের ব্যবহার করুন use


6

সরল! আপনি ব্যবহার করতে পারেন sizeএবং fromপরামিতি!

http://localhost:9200/[your index name]/_search?size=1000&from=0

তারপরে আপনি fromসমস্ত ডেটা না পাওয়া পর্যন্ত আপনি ধীরে ধীরে পরিবর্তন করুন ।


4
যদি ডেটাতে অনেকগুলি নথি থাকে তবে এই পদ্ধতিটি কখনই ব্যবহার করবেন না ... প্রতিবার আপনি "পরবর্তী পৃষ্ঠায়" যান ইলাস্টিকটি ধীর এবং ধীর হয়ে যাবে! পরিবর্তে অনুসন্ধানএফটার ব্যবহার করুন
জোশলো

3
এছাড়াও, সামগ্রিক উপাত্তের আকার 10 000 এর উপরে থাকলে এই সমাধানটি কাজ করবে না The বিকল্প আকার = 1000 এবং = 10001 থেকে ব্যর্থ হবে।
আইসিএলম্যান

2
সত্যই ব্যর্থ। প্যারামিটার from+ sizeইনডেক্স.ম্যাক্স_সাল্ট_ উইন্ডো সূচক সেটিংয়ের চেয়ে বেশি হতে পারে না যা ডিফল্ট 10,000
স্টিলিও

1
যদি ডেটাটিতে হাজার হাজার নথি থাকে তবে সঠিক উত্তরটি একটি 'স্ক্রোল' কোয়েরি ব্যবহার করা উচিত।
হ্যারি উড

সঙ্গে fromএবং size-approach আপনি গভীর পত্রাঙ্কন সমস্যার মধ্যে চালানো হবে। সমস্ত নথির ডাম্প তৈরি করতে স্ক্রোল এপিআই ব্যবহার করুন।
ড্যানিয়েল স্নিটার

5

আকার সমন্বয় করার সর্বোত্তম উপায় হ'ল URL এর সামনে আকার = সংখ্যা ব্যবহার করা

Curl -XGET "http://localhost:9200/logstash-*/_search?size=50&pretty"

দ্রষ্টব্য: সর্বোচ্চ আকার যা এই আকারে সংজ্ঞায়িত করা যেতে পারে এটি 10000 ten


যেহেতু সর্বাধিক আকারের সংস্করণটি ঘটে?
উডিডিআরএন

এটি একটি পয়েন্ট অবধি "সেরা" উপায় হতে পারে, তবে সত্যিই কিছুটা নোডি। আপনার যদি হাজার হাজার রেকর্ড থাকে তবে সর্বোত্তম উপায় হ'ল "স্ক্রোল" কোয়েরি।
হ্যারি উড

এর থেকে এবং আকার-পদ্ধতির সাহায্যে আপনি গভীর পৃষ্ঠায়ণ সমস্যার মধ্যে চলে যাবেন। সমস্ত নথির ডাম্প তৈরি করতে স্ক্রোল এপিআই ব্যবহার করুন।
ড্যানিয়েল স্নিটার

5

প্যারামিটারটির _countমান পেতে আপনি API ব্যবহার করতে পারেন size:

http://localhost:9200/foo/_count?q=<your query>

রিটার্নস {count:X, ...}। 'এক্স' মানটি বের করুন এবং তারপরে প্রকৃত ক্যোয়ারী করুন:

http://localhost:9200/foo/_search?q=<your query>&size=X

1
আকারটিকে X এর মতো সেট করা, একটি আশ্চর্যজনক সমঝোতা সমস্যা হতে পারে: গণনাটি করা এবং আপনার পরবর্তী ক্যোয়ারীতে আকার নির্ধারণের মধ্যে কোনও রেকর্ড যুক্ত করা হয় তা বিবেচনা করুন ... তবে আপনার কাছে হাজার হাজার রেকর্ড পাওয়ার পরেও , তাহলে এটি ভুল পদ্ধতির। পরিবর্তে আপনার "স্ক্রোল" ক্যোরি ব্যবহার করা উচিত।
হ্যারি উড

4

http: // লোকালহোস্ট: 9200 / foo / _ অনুসন্ধান / ? আকার = 1000 এবং সুন্দর = 1

ডিফল্ট 10 হওয়ায় আপনাকে আকারের ক্যোয়ারী প্যারামিটার নির্দিষ্ট করতে হবে


এর থেকে এবং আকার-পদ্ধতির সাহায্যে আপনি গভীর পৃষ্ঠায়ণ সমস্যার মধ্যে চলে যাবেন। সমস্ত নথির ডাম্প তৈরি করতে স্ক্রোল এপিআই ব্যবহার করুন।
ড্যানিয়েল স্নিটার

4

সাইজ প্যারাম ডিফল্ট (10) থেকে 500 এ প্রদর্শিত হিটগুলি বাড়িয়ে তোলে।

HTTP: // স্থানীয় হোস্ট: 9200 / [indexName] / _search চমত্কার = সত্য ও আকার = 500 & Q = *: *

পরিবর্তন থেকে সব ডেটা পেতে ধাপে ধাপে।

HTTP: // স্থানীয় হোস্ট: 9200 / [indexName] / _search আকার = 500 & থেকে = 0

3

ইলাস্টিকসার্চ 6.x এর জন্য

অনুরোধ: GET /foo/_search?pretty=true

প্রতিক্রিয়া: হিট-> মোটে ডক্সের গণনা দিন

    {
      "took": 1,
      "timed_out": false,
      "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
      },
      "hits": {
        "total": 1001,
        "max_score": 1,
        "hits": [
          {

3

যদি এটি একটি ছোট ডেটাসেট (যেমন 1K রেকর্ডস) হয় তবে আপনি কেবল উল্লেখ করতে পারেন size:

curl localhost:9200/foo_index/_search?size=1000

অন্তর্ভুক্ত হিসাবে, সমস্ত ক্যোয়ারির সাথে মিলের প্রয়োজন নেই।

আপনার যদি 1M রেকর্ডের মতো মাঝারি আকারের ডেটাসেট থাকে তবে এটি লোড করার জন্য আপনার পর্যাপ্ত মেমরি নাও থাকতে পারে, সুতরাং আপনার একটি স্ক্রোল প্রয়োজন ।

একটি স্ক্রোল একটি ডিবিতে কার্সারের মতো। ইলাস্টিকসर्चে, এটি কোথায় গিয়েছিল এবং এটি সূচকের একই দৃষ্টিভঙ্গি রাখে তা মনে রাখে (অর্থাত্ সন্ধানকারীকে রিফ্রেশ করে দূরে যাওয়া থেকে বিরত রাখে , বিভাগগুলিকে মার্জ করা থেকে বাধা দেয় )।

এপিআই-ভিত্তিক, আপনাকে প্রথম অনুরোধে একটি স্ক্রোল প্যারামিটার যুক্ত করতে হবে:

curl 'localhost:9200/foo_index/_search?size=100&scroll=1m&pretty'

আপনি প্রথম পৃষ্ঠা এবং একটি স্ক্রোল আইডি ফিরে পাবেন:

{
  "_scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAADEWbmJlSmxjb2hSU0tMZk12aEx2c0EzUQ==",
  "took" : 0,
...

মনে রাখবেন যে আপনি ফিরে পাবেন এবং স্ক্রোল আইডি উভয়ই পরবর্তী পৃষ্ঠার জন্য বৈধ । এখানে একটি সাধারণ ভুলটি হ'ল একটি খুব বড় সময়সীমা (মান scroll) নির্দিষ্ট করা, যা এক পৃষ্ঠার পরিবর্তে পুরো ডেটাসেট (উদাহরণস্বরূপ 1M রেকর্ডস) প্রসেস করার জন্য কভার করবে (উদাহরণস্বরূপ 100 রেকর্ডস)।

পরবর্তী পৃষ্ঠাটি পেতে, শেষ স্ক্রোল আইডি এবং একটি সময়সীমা পূরণ করুন যা নিম্নলিখিত পৃষ্ঠাগুলি আনার পূর্ববর্তী হওয়া উচিত:

curl -XPOST -H 'Content-Type: application/json' 'localhost:9200/_search/scroll' -d '{
  "scroll": "1m",
  "scroll_id": "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAADAWbmJlSmxjb2hSU0tMZk12aEx2c0EzUQ=="
}'

আপনার যদি রফতানির জন্য অনেক কিছু থাকে (যেমন 1 বি ডকুমেন্টস) , আপনি সমান্তরাল করতে চাইবেন। এটি কাটা স্ক্রোলের মাধ্যমে করা যেতে পারে । বলুন আপনি 10 টি থ্রেডে রফতানি করতে চান। প্রথম থ্রেডটি এই জাতীয় অনুরোধ জারি করবে:

curl -XPOST -H 'Content-Type: application/json' 'localhost:9200/test/_search?scroll=1m&size=100' -d '{
  "slice": {
    "id": 0, 
    "max": 10 
  }
}'

আপনি প্রথম পৃষ্ঠা এবং একটি স্ক্রোল আইডি ফিরে পাবেন ঠিক ঠিক একটি সাধারণ স্ক্রোল অনুরোধের মতো। আপনি একে একে নিয়মিত স্ক্রলের মতোই গ্রাস করবেন, ব্যতীত আপনি 1/10 তম ডেটা পান।

id1, 2, 3 বাদে অন্য থ্রেডগুলি একই কাজ করবে ...



2

ডিফল্টরূপে ইলাস্টিকসर्च 10 টি রেকর্ড ফেরত দেয় যাতে আকারটি স্পষ্টভাবে সরবরাহ করা উচিত।

রেকর্ডের ইচ্ছা নম্বর পেতে অনুরোধের সাথে আকার যুক্ত করুন।

http: // {হোস্ট}: 9200 / {সূচক_নাম} / _ অনুসন্ধান? সুন্দর = সত্য এবং আকার = (রেকর্ডের সংখ্যা)

দ্রষ্টব্য: সর্বাধিক পৃষ্ঠার আকার index.max_result_window সূচী সেটিং এর চেয়ে বেশি হতে পারে না যা ডিফল্ট 10,000।


2

কিবানা দেবটুলস থেকে এটি:

GET my_index_name/_search
{
  "query": {
    "match_all": {}
  }
}

2

পাইথন প্যাকেজ ইলাস্টিকসার্চ-ডিএসএল ব্যবহার করে একটি সহজ সমাধান :

from elasticsearch_dsl import Search
from elasticsearch_dsl import connections

connections.create_connection(hosts=['localhost'])

s = Search(index="foo")
response = s.scan()

count = 0
for hit in response:
    # print(hit.to_dict())  # be careful, it will printout every hit in your index
    count += 1

print(count)

এছাড়াও https://elasticsearch-dsl.readthedocs.io/en/latest/api.html#elasticsearch_dsl.S Search.scan দেখুন ।


1

সর্বাধিক ফলাফল যা ইলাস্টিক অনুসন্ধানে ফিরে আসবে তা আকার সরবরাহ করে 10000 is

curl -XGET 'localhost:9200/index/type/_search?scroll=1m' -d '
{
   "size":10000,
   "query" : {
   "match_all" : {}
    }
}'

এর পরে, ফলাফল পাওয়ার জন্য আপনাকে স্ক্রোল এপিআই ব্যবহার করতে হবে এবং _ স্ক্রোল_আইডি মান পেতে হবে এবং এই মানটি স্ক্রোল_আইডিতে রাখতে হবে

curl -XGET  'localhost:9200/_search/scroll'  -d'
{
   "scroll" : "1m", 
   "scroll_id" : "" 
}'

খুব প্রথম অনুরোধের সাথে শুরু থেকেই স্ক্রোল এপিআই ব্যবহার করা উচিত।
ড্যানিয়েল স্নিটার

1

সরকারী ডকুমেন্টেশন এই প্রশ্নের উত্তর সরবরাহ করে! আপনি এটি এখানে খুঁজে পেতে পারেন ।

{
  "query": { "match_all": {} },
  "size": 1
}

আপনি কেবল ফলাফল দেখতে চান তার সংখ্যার সাথে আকার (1) প্রতিস্থাপন করুন!


প্রশ্নের লেখক 'পূর্ব' নির্ধারিত পরিমাণের ফলাফল নয়, 'সমস্ত' ফলাফলের জন্য জিজ্ঞাসা করছিলেন। ডক্সে একটি লিঙ্ক পোস্ট করা সহায়ক, যদিও ডক্স কীভাবে এটি অর্জন করতে পারে তা বর্ণনা করে না, আপনার উত্তরও দেয় না।
মার্টেন00

এর থেকে এবং আকার-পদ্ধতির সাহায্যে আপনি গভীর পৃষ্ঠায়ণ সমস্যার মধ্যে চলে যাবেন। সমস্ত নথির ডাম্প তৈরি করতে স্ক্রোল এপিআই ব্যবহার করুন।
ড্যানিয়েল স্নিটার

0

সমস্ত সূচক থেকে সমস্ত রেকর্ড ফিরিয়ে দিতে আপনি করতে পারেন:

curl -XGET http://35.195.120.21:9200/_all/_search?size=50&pretty

আউটপুট:

  "took" : 866,
  "timed_out" : false,
  "_shards" : {
    "total" : 25,
    "successful" : 25,
    "failed" : 0
  },
  "hits" : {
    "total" : 512034694,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "grafana-dash",
      "_type" : "dashboard",
      "_id" : "test",
      "_score" : 1.0,
       ...

0
curl -XGET '{{IP/localhost}}:9200/{{Index name}}/{{type}}/_search?scroll=10m&pretty' -d '{
"query": {
"filtered": {
"query": {
"match_all": {}
}}'

যদিও এই কোড স্নিপেট একটি ব্যাখ্যা সহ প্রশ্নটি সমাধান করতে পারে, সত্যিই আপনার পোস্টের মান উন্নত করতে সহায়তা করে। মনে রাখবেন যে আপনি ভবিষ্যতে পাঠকদের জন্য প্রশ্নের উত্তর দিচ্ছেন, এবং সেই লোকেরা আপনার কোড পরামর্শের কারণগুলি জানেন না।
স্ট্যামোস

0

@ আকিরা সেন্দোহ ব্যতীত অন্যেরা আসলে কীভাবে সমস্ত দস্তাবেজ পাবেন সে সম্পর্কে উত্তর দেয়নি। এমনকি সেই সমাধানটি লগ ছাড়াই আমার ইএস 6.3 পরিষেবা ক্র্যাশ করে। নিম্ন স্তরের elasticsearch-pyলাইব্রেরিটি ব্যবহার করে আমার পক্ষে একমাত্র কাজটি হ'ল এপিআই ব্যবহার করা স্ক্যান সহায়ক দ্বারাscroll() :

from elasticsearch.helpers import scan

doc_generator = scan(
    es_obj,
    query={"query": {"match_all": {}}},
    index="my-index",
)

# use the generator to iterate, dont try to make a list or you will get out of RAM
for doc in doc_generator:
    # use it somehow

যাইহোক, ক্লিনার উপায় আজকাল মাধ্যমে হবে বলে মনে হয় elasticsearch-dsl, পাঠাগার যে আরো বিমূর্ত অফার, ক্লিনার কল, যেমন: http://elasticsearch-dsl.readthedocs.io/en/latest/search_dsl.html#hits


0

এখনও যদি কেউ কিছু ব্যবহারের ক্ষেত্রে আমার মতো ইলাস্টিকের অনুসন্ধান থেকে সমস্ত ডেটা পুনরুদ্ধারের জন্য সন্ধান করে থাকে, আমি এখানে যা করেছি তা এখানে। তদুপরি, সমস্ত ডেটা মানে সমস্ত সূচি এবং সমস্ত নথি প্রকার। আমি ইলাস্টিকসার্চ 6.3 ব্যবহার করছি

curl -X GET "localhost:9200/_search?pretty=true" -H 'Content-Type: application/json' -d'
{
    "query": {
        "match_all": {}
    }
}
'

স্থিতিস্থাপক অনুসন্ধান রেফারেন্স


0

আপনি যা চান তা পূরণ করার জন্য এটিই কোয়েরি, (আমি কিবানাটি ব্যবহার করার পরামর্শ দিচ্ছি, কারণ এটি কোয়েরিগুলি আরও ভালভাবে বুঝতে সহায়তা করে)

GET my_index_name/my_type_name/_search
{
   "query":{
      "match_all":{}
   },
   size : 20,
   from : 3
}

সমস্ত রেকর্ড পেতে আপনাকে "ম্যাচ_এল" কোয়েরিটি ব্যবহার করতে হবে।

আকার আপনি আনতে চান এমন রেকর্ডগুলির মধ্যে একটি (সীমাবদ্ধতার ধরণের)। ডিফল্টরূপে, ইএস কেবল 10 টি রেকর্ড ফেরত দেবে

থেকে বাদ দেওয়া যেমন প্রথম 3 টি রেকর্ড এড়িয়ে যান sk

আপনি যদি সমস্ত রেকর্ডটি ঠিকঠাক পেতে চান, আপনি কিবানা থেকে এই ক্যোয়ারীটি একবার আঘাত করলে ফলাফল থেকে "মোট" ক্ষেত্রের মানটি ব্যবহার করুন এবং এটি "আকার" দিয়ে ব্যবহার করুন।


এই ক্যোয়ারির সীমাবদ্ধতা হ'ল আকার + থেকে অবশ্যই "index.max_result_window" এর চেয়ে কম বা সমান হতে হবে। বৃহত সংখ্যক দস্তাবেজের জন্য (ডিফল্ট 10000+) এই কোয়েরি প্রযোজ্য নয়।
কারেলহুসা

0

ইলাস্টিকসার্ক ব্যবহার করে 7.5.1

http://${HOST}:9200/${INDEX}/_search?pretty=true&q=*:*&scroll=10m&size=5000

যদি আপনি আপনার অ্যারের আকার & আকার = $ {সংখ্যা with দিয়েও নির্দিষ্ট করতে পারেন

আপনি যদি সূচক না জানেন

http://${HOST}:9200/_cat/indices?v

0

নিম্নলিখিত অনুসন্ধানের জন্য কিবানা কনসোল এবং মাই_ইন্ডেক্স ব্যবহার করে সূচি হিসাবে অবদান রাখতে পারেন। সূচকে কেবল সূচকের 4 টি ক্ষেত্রকে ফেরত দিতে অনুরোধ করে, আপনি সূচীর মাধ্যমে কতগুলি নথি ফেরত পেতে চান তা নির্দেশ করতে আপনি আকার যুক্ত করতে পারেন। ES 7.6 হিসাবে আপনার ফিল্টার করার পরিবর্তে _ উত্স ব্যবহার করা উচিত এটি দ্রুত সাড়া দেবে।

GET /address/_search
 {
   "_source": ["streetaddress","city","state","postcode"],
   "size": 100,
   "query":{
   "match_all":{ }
    }   
 }

-5

আপনি আকার = 0 ব্যবহার করতে পারেন এটি আপনাকে সমস্ত দস্তাবেজের উদাহরণ প্রদান করবে

curl -XGET 'localhost:9200/index/type/_search' -d '
{
   size:0,
   "query" : {
   "match_all" : {}
    }
}'

1
এটি একটি জমে থাকা তথ্য ফেরত দেবে, তবে সেগুলি হিট নয়
ব্যবহারকারী 732456
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.