2014-02-24 1 views
3

FOS Elastica를 사용하는 리포지토리를 단위 테스트하고 배열 형식이 아닌 쿼리의 문자열 버전을 얻는 방법을 알고 있는지 궁금합니다.FOS Elastica - 쿼리의 문자열 표현

/** 
    * Creates query object by either first or last name, with given parameters 
    * 
    * @param $name 
    * 
    * @param array $params 
    * 
    * @return Query 
    */ 
    public function findByFirstOrLast($name, array $params) 
    { 
     $queryString = new QueryString(); 
     $queryString->setQuery($name); 
     $queryString->setFields(array('firstName', 'lastName')); 


     $query = new Query(); 
     $query->setQuery($queryString); 
     $query->setSort(array($params['sort'] => array('order' => $params['direction']))); 

     return $query; 
    } 

$name = 'foo'; 가정 (내가 ID를 정렬하고 있음), I는 해당 FOS 엘라 쿼리 사람이 json-을 얻는 방법을 알고 있나요

{ 
    "query": 
    { 
     "query_string": 
      { 
       "query": 
        "foo", 
        "fields":["firstName","lastName"] 
      } 
    }, 
    "sort": 
    { 
     "id": 
      { 
       "order":"asc" 
      } 
    } 
} 

을해야한다 생각 : 여기 내 저장소 방법 쿼리의 문자열 표현? 그것은 반드시이 예쁜 형식 일 필요는 없으며 한 줄짜리 문자열 일 수도 있습니다.

+0

이 권한을 얻을 수 있었습니까? 그 순간 똑같은 것을 알아 내려고 노력했습니다. – iLikeBreakfast

+0

아니, 죄송합니다. FOS Elastica는 하나 이상의 엔티티 간의 매핑으로 인덱스를 생성 (또는 채우기, 업데이트 등)하는 것을 잘 처리하지 않아 결국 사용하지 못했습니다. 행운을 빕니다! – DIMMSum

답변

11

더 이상 이것을 사용하지 않고 동일한 것을 필요로합니다.

return $ query 바로 전에 json_encode ($ query-> getQuery() -> toArray())를 사용할 수 있으며 필요한 줄을 한 줄의 문자열로 제공해야합니다.

+4

ElasticSearch 'head'플러그인에 복사하여 붙여 넣기가 더 쉬워 지도록하려면 print json_encode (array ('query'=> $ query-> getQuery())). "\ n"; –

+2

getQuery가 Query 객체를 반환 할 수 있으므로 $ query-> getQuery() -> toArray()를 사용해야합니다. – COil

+1

체크 아웃 : https://github.com/ruflin/Elastica/commit/da852653c484f87e19ca10c8255eb68847bbde2d – COil

1

질문에 대한 직접적인 대답은 아니지만 매우 관련되어 있습니다. 당신은 출력의 종류를 가질 수

query: 
    filtered: 
    query: 
     multi_match: 
      query: php 
      operator: AND 
      fields: 
       - field1^30 
       - field2 
       - field3      
       - _all 

: 당신의 elasticsearch 쿼리를 테스트하기 위해 found.no 같은 도구를 사용하는 경우이 같은 found.no 편집기에 붙여 넣을 수 있도록, YAML로 출력을 가지고 재미있을 수있다 다음 기능 :

use Elastica\Query; 
use Symfony\Component\Yaml\Dumper; 

/** 
* @param Query $query 
* @param bool $asYaml 
*/ 
protected function debugQuery(Query $query, $asYaml = false) 
{ 
    echo '<pre>'; 
    $debug = ['query' => $query->getQuery()->toArray()]; 

    if (false === $asYaml) { 
     echo json_encode($debug, JSON_PRETTY_PRINT); 
     die(); 
    } 

    $dumper = new Dumper(); 
    $yaml = $dumper->dump($debug, 100); 

    echo $yaml; 
    die(); 
} 

그래서 어느 형식이든 선택할 수 있습니다.