2

200 万のドキュメントのインデックスを作成しましたが、一致するすべてのドキュメント ID を一度に返そうとしています。私はPHPクライアントを使用しています。

私のマッピングは次のとおりです。

$params = [
    'index' => $index,
    'body' => [
        'settings' => [
            "number_of_shards" => 1,
            "number_of_replicas" => 0,
            "index.queries.cache.enabled" => false,
            "index.soft_deletes.enabled" => false,
            "index.refresh_interval" => -1,
            "index.requests.cache.enable" => false,
            "index.max_result_window"=> $result_window
        ],
        'mappings' => [
            '_source' => [
                "enabled" => false
             ],
             'properties' => [
                "text" => [
                        "type" => "text",
                        "index_options" => "docs"
                ]
        ]
     ]
    ]
];

私のクエリ文字列は次のとおりです。

$json = '{
"from" : 0, "size" : '.$size.',
        "profile": true,
"query": {
    "bool": {
      "filter" : {
        "match" : {
            "text" : {
            "query" : "justin trump clinton harry",
            "operator" : "and"
            }
        }
    }
}
}
}';

私のプロファイル API の出力は次のとおりです。

Array                                                                                                                                  
(                                                                                                                                 
    [shards] => Array                                                                                                
        (                                                                                                               
            [0] => Array                                                                                                    
                (                                                                                                   
                    [id] => [tod2gbVKSRGinZVfdXTmxA][elasticindex-2][0]                                 
                    [searches] => Array                                                                          
                        (                                                                                     
                            [0] => Array                                                                                  
                                (                                                                                   
                                    [query] => Array                                                             
                                        (                                                                            
                                            [0] => Array                                                       
                                                (                                                                    
                                                    [type] => BoostQuery                                            
                                                    [description] => (ConstantScore(+text:justin +text:trump +text:clinton +text:harry))^0.0
                                                    [time_in_nanos] => 176108294                                                  
                                                    [breakdown] => Array                                           
                                                        (                                                               
                                                            [set_min_competitive_score_count] => 0                          
                                                            [match_count] => 0                                    
                                                            [shallow_advance_count] => 0                
                                                            [set_min_competitive_score] => 0                          
                                                            [next_doc] => 158666901                           
                                                            [match] => 0                                                  
                                                            [next_doc_count] => 439522                              
                                                            [score_count] => 439522                              
                                                            [compute_max_score_count] => 0                           
                                                            [compute_max_score] => 0                            
                                                            [advance] => 262234                                                   
                                                            [advance_count] => 1                                    
                                                            [score] => 14477781                                         
                                                            [build_scorer_count] => 2                                             
                                                            [create_weight] => 401058                              
                                                            [shallow_advance] => 0                                      
                                                            [create_weight_count] => 1                                      
                                                            [build_scorer] => 1421272                         
                                                        )                                                                 

                                                    [children] => Array                                          
                                                        (                                                                 
                                                            [0] => Array
(                                                                                       
                                                                    [type] => BooleanQuery
                                                                    [description] => +text:justin +text:trump +text:clinton +text:harry
                                                                    [time_in_nanos] => 128547273
                                                                    [breakdown] => Array
                                                                        (
                                                                            [set_min_competitive_score_count] => 0
                                                                            [match_count] => 0
                                                                            [shallow_advance_count] => 0
                                                                            [set_min_competitive_score] => 0
                                                                            [next_doc] => 126071813
                                                                            [match] => 0
                                                                            [next_doc_count] => 439522
                                                                            [score_count] => 0
                                                                            [compute_max_score_count] => 0
                                                                            [compute_max_score] => 0
                                                                            [advance] => 260695
                                                                            [advance_count] => 1
                                                                            [score] => 0
                                                                            [build_scorer_count] => 2
                                                                            [create_weight] => 373620
                                                                            [shallow_advance] => 0
                                                                            [create_weight_count] => 1
                                                                            [build_scorer] => 1401619
                                                                        )

                                                                    [children] => Array
                                                                        (
                                                                            [0] => Array
                                                                                (
                                                                                    [type] => TermQuery
                                                                                    [description] => text:justin
                                                                                    [time_in_nanos] => 40691947

                                                                                )

                                                                            [1] => Array
                                                                                (
                                                                                    [type] => TermQuery
                                                                                    [description] => text:trump
                                                                                    [time_in_nanos] => 42972729
                                                                                )

                                                                            [2] => Array
                                                                                (
                                                                                    [type] => TermQuery
                                                                                    [description] => text:clinton
                                                                                    [time_in_nanos] => 29407195

                                                                                )

                                                                            [3] => Array
                                                                                (
                                                                                    [type] => TermQuery
                                                                                    [description] => text:harry
                                                                                    [time_in_nanos] => 33799904

                                                                                )

                                                                        )

                                                                )

                                                        )

                                                )

                                        )

                                    [rewrite_time] => 260704
                                    [collector] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [name] => SimpleTopScoreDocCollector
                                                    [reason] => search_top_hits
                                                    [time_in_nanos] => 116380511
                                                )
                                        )

                                )

                        )

                )

        )

)

目標は、一致するすべてのドキュメントを一度に取得することです。ドキュメント ID のみが必要なので (指定された用語がドキュメントに存在するかどうかのみを確認します)、index_options をドキュメントとして使用しました。スクロール API については理解していますが、max_result_window を使用したいです。私はシャードを 1 つだけ使用し、レプリカは使用していません。また、検索操作を実行するときにドキュメントのスコアリングを回避しました。

私の質問は次のとおりです。

  1. ドキュメント ID のみを取得し、ドキュメントのフェッチ フェーズを回避したいので、ソース フィールドを無効にしました。他のメタデータを回避するために、このリンクに従って "stored_fields": " none ", "docvalue_fields": ["_id"] を試し、フェッチ フェーズを回避しました。ただし、ドキュメントの種類とインデックス名は引き続き表示されます。ドキュメント ID のみを取得し、フェッチ フェーズを回避するために必要なことはありますか?

  2. 一致するすべてのドキュメントを取得しているので、スコアリングは私には関係ないので、フィルター句を使用しましたが、以下のプロファイル API の結果でなぜブーストクエリのタイミングが得られるのか疑問に思っていました。しかし、Booleanquery スコアのタイミングがゼロであることにも注意してください!

  3. ブール クエリ検索が Lucene インデックスだけでどれくらいの時間を要したかを知るには、ブール クエリによって報告された時間を取るべきですか、それともすべての子 (ターム クエリ) のタイミングを合計する必要がありますか? これらすべての用語クエリのタイミングを追加すると、ブールクエリによって報告されたものよりも高いためです。これについて考えられる理由はありますか?

  4. ブールクエリのタイミングのためにコレクターも含める必要がありますか?プロファイル api では、「Lucene は、トラバーサル、スコアリング、および一致するドキュメントのコレクションの調整を担当する「コレクター」を定義することによって機能すると言われています。」. また、「コレクターの時間はクエリの時間とは独立していることに注意してください。それらは独立して計算、結合、および正規化されます! Lucene の実行の性質上、コレクターの時間を「マージ」することは不可能です。クエリ セクションなので、それらは別々の部分に表示されます。」私の理解では、Lucene インデックスの投稿リストを走査してブール クエリ操作を実行するのに役立ちます。この点で私は正しいですか?

  5. Elasticsearch でインデックス作成時間を調査するための同様の API はありますか? 設定 API でインデックス作成時間を取得できましたが、プロファイル API に似たものを探していますか?

4

0 に答える 0