2017-10-04 95 views
4

正如標題所示,我升級到ES5。我原來的ES查詢看起來像:Perl從2.4升級到5後彈性查詢被破壞

my $response = $elastic->do_request_new( 
     { 
      query  => { 
       filtered => { 
        filter => { 
         or => [ 
          { term => { _type => { value => "some_val1" } } }, 
          { term => { _type => { value => "some_val2" } } }, 
         ] 
        }, 
        query => { 
         query_string => { 
          query => $qstring, 
          rewrite => "scoring_boolean", 
          analyze_wildcard => "true", 
         } 
        } 
       } 
      }, 

      sort => [ qw(_score) ], 
      size => 50, 
     }, 
    ); 

我更新的模樣:

my $response = $elastic->do_request_new(
    { 
     query  => { 
      bool => { 
       should => [ 
        { term => { _type => { value => "some_val1" } } }, 
        { term => { _type => { value => "some_val2" } } }, 
       ], 
       must => { 
        query_string => { 
         query => $qstring, 
         rewrite => "scoring_boolean", 
         analyze_wildcard => "true", 
        } 
       } 
      } 
     }, 
     sort => [ qw(_score) ], 
     size => 50, 
    }, 
); 

然而,在尋找我的彈性數據庫精確匹配,我返回結果爲零:

{ 
    "took" : 3, 
    "timed_out" : false, 
    "_shards" : { 
    "total" : 5, 
    "successful" : 5, 
    "failed" : 0 
    }, 
    "hits" : { 
    "total" : 0, 
    "max_score" : null, 
    "hits" : [ ] 
    } 
} 

關於可能發生什麼的任何想法?我的猜測是我的查詢結構錯誤。謝謝!

回答

1

更新:下面的固定查詢:

my $response = $elastic->do_request_new(
    { 
     query => { 
       bool => { 
        must => [ 
         { 
          query_string => { 
           query   => $qstring, 
           rewrite   => "scoring_boolean", 

           analyze_wildcard => "true", 
          }, 
         } 
        ], 
        filter => { 
         bool => { 
          should => [ 
           { term => { _type => { value => "some_val1" } } }, 
           { term => { _type => { value => "some_val2" } } }, 

          ], 
         }, 
        }, 
       }, 
      }, 
     sort => [ qw(_score) ], 
     size => 50, 
    }, 
);