簡體   English   中英

我怎么知道彈性搜索中的滾動是否有效

[英]how can I know that the scroll in elasticsearch if it works

我正在使用elasticsearch-php。

我使用此代碼,在我做的測試中效果很好。

require_once 'app/init.php';

if (isset($_GET['q'])) {
                $q = $_GET['q'];
                $query= $es->search([
                      'index' => 'rebajas',
                      //'search_type' => 'scan',
                      'scroll' => '2m',
                      //'from' => 0,
                      'size' => 1000,
                      'body'=>[
                        'query'=>[
                          'bool' => [
                            'should' => [
                              'match'=>['titulo'=>$q],

                            ]
                          ]

                        ]

                      ]


                    ]);
                  if ($query['hits']['total']>=1) {

                      $scroll_size = $query['hits']['total'];
                      $results = $query['hits']['hits'];

                      //scrol
                      $scroll_id = $query['_scroll_id'];


                        print " total results:   " . $scroll_size;
                        $count = 0;
                        // first set of scroll results
                        for ($i=0; $i<$scroll_size; $i++) {
                            $count++;
                        }
                        //scroll
                        while (isset($query['hits']['hits']) && count($query['hits']['hits']) > 0) {

                            // **
                            // Do your work here, on the $response['hits']['hits'] array
                            // **
                            $conta =0;
                            foreach ($results as $r ) {
                                $conta++;

                        ?>

                        <h1 class="mt-5"><a href=""><?php echo $conta." " .$r['_source']['titulo'];?></a> <i class="fa fa-search-plus" aria-hidden="true"></i></h1>


                        <?php
                            }

                            // When done, get the new scroll_id
                            // You must always refresh your _scroll_id!  It can change sometimes
                            $scroll_id = $query['_scroll_id'];

                            // Execute a Scroll request and repeat
                            $query = $es->scroll([
                                    "scroll_id" => $scroll_id,  //...using our previously obtained _scroll_id
                                    "scroll" => "30s"           // and the same timeout window
                                ]
                            );
                        }


                    }

                }

問題是:此滾動條在生產時如何工作,提取大約一萬條記錄,會不會阻塞這么多記錄的服務器? 我如何檢查正在加載什么? 這與無限滾動的工作原理相同,也就是說,當我向下瀏覽頁面時,將加載記錄。

這是一個問題嗎,如何實現由elasticsearch支持的無限滾動? 這是整個課堂/框架中值得提出的問題。 但是,讓我刺一下它。

如果您想無限滾動,則可能需要先從Web服務端點中斷開數據API(即,數據不應該隨頁面一起加載[您可能希望第一頁隨頁面一起提供,但是它不需要,並且要加載下一頁,您幾乎肯定會希望將其作為自己的API])。 然后,當用戶向下滾動網頁時,您將需要AJAX請求頁面(即,如果用戶滾動到n / PAGE_SIZE,則請求下一頁)。 您基本上可以使用Google“無限滾動實現”,但這可以很好地捕捉意圖

話雖這么說,對於Elasticsearch(將ES用作網站的直接無限滾動支持),這通常不是一個好用例。 大部分原因都封裝在這里 基本上可以歸結為這樣的事實:在彈性搜索中擁有很多打開的滾動條是昂貴的,盡管如果您的用戶很少並且超時很嚴格,那可以嗎? 滾動條不是用於“實時”使用的,而是用於數據導出用例的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM