2016-06-17 3 views
0

나는 elasticsearch에 PHP 쿼리를 사용하기 위해 사용하는 쿼리 중 일부를 번역하는 데 어려움을 겪고 있습니다.PHP로 탄성 검색을 쿼리

$query = $elastic->search([ 
body' => [ 
    'query' => [ 
     'match' => [ 
      'myfield' => 'mymatchingresult' 
     ] 
    ] 
] 
]); 

을하지만 난 다음에 따라 작동하도록 노력하고있어 :

예를 들어이 간단한 쿼리가 작동합니다. 오류가 없으며 실행되지 않습니다. 나는 구조를 이해하면 안된다. 동일한 검색어가 Google 확장 감각과 같은 것으로 배치되면 작동하는 것 같습니다. (PHP '=>'를 ':'등으로 변환)

$query = $elastic->search([ 
'body' => [ 
    'query' => [ 
     'filtered' => [ 
      'query' => [ 
       'query_string' => [ 
        'query' => '*', 
        'analyze_wildcard' => 'true' 
       ] 
      ], 
      'filter' => [ 
       'bool' => [ 
        'must' => [ 
         'query' => [ 
          'query_string' => [ 
           'analyze_wildcard' => 'true', 
           'query' => 'cn:name' 
          ] 
         ], 
         'range' => [ 
          '@timestamp' => [ 
           'from' => '2012-05-01', 
           'to' => '2016-05-01' 
          ] 
         ] 
        ] 
       ] 
      ] 
     ] 
    ] 
] 
]); 

도움 주셔서 감사합니다! -John

+0

당신이 당신의 ES 서버에 직접 컬 형태로이 쿼리를 시도 할 수 : 이것처럼

? 디버깅 PHP + ES 고통 수 있습니다. 내 경험과 권유는 컬을 통해 먼저 쿼리를 시도하는 것입니다. 당신이 그것을 확신하는 경우 다음 해당 PHP를 시도하십시오. 특히 침묵하고 이상한 행동에 빠지면. 시도해보고 출력 오류를 붙여 넣으십시오. – jhmilan

답변

0

내가 알 수있는 한 bool/must 필터의 제약 조건은 대괄호로 묶어야합니다. 즉, bool/must은 연관 배열이 아닌 순수한 배열이어야합니다.

$query = $elastic->search([ 
'body' => [ 
    'query' => [ 
     'filtered' => [ 
      'query' => [ 
       'query_string' => [ 
        'query' => '*', 
        'analyze_wildcard' => 'true' 
       ] 
      ], 
      'filter' => [ 
       'bool' => [ 
        'must' => [ 
         [ 
         'query' => [ 
          'query_string' => [ 
           'analyze_wildcard' => 'true', 
           'query' => 'cn:name' 
          ] 
         ] 
         ], 
         [ 
         'range' => [ 
          '@timestamp' => [ 
           'from' => '2012-05-01', 
           'to' => '2016-05-01' 
          ] 
         ] 
         ] 
        ] 
       ] 
      ] 
     ] 
    ] 
] 
]);