2014-07-16 3 views
1

Solr + Solarium에서 일하고 있습니다. 멀티 패싯 검색을 정의했습니다. 각 패싯 옵션 뒤에는 반환 된 결과의 개수를 보여주는 카운터가 있습니다.Solr + Solarium : 카운터가 다중 선택 패싯과 함께 작동하지 않습니다.

다중 선택 패싯에서 옵션을 선택하면 다른 패싯의 카운터가 여전히 작동 할 것으로 예상됩니다.

solr 결과가 있습니다. 내 오래된 코드 (단일 선택 패싯)에서는 가솔린/디젤의 값을 반환했습니다.

예. 다음 2면 :

자동차 브랜드 : - 볼보 (3) -mazda (2) -volkswagen (5)

연료 : -Diesel (4) -Petrol (6)

이제 볼보와 마쓰다를 선택하고 싶습니다. 선택된 -mazda (2) -volkswagen (5)

연료 - - 볼보 (3) : -Diesel (0

제작사 : 볼보 SOLR/일광을 선택하면 다음 2 개면을 반환) -Petrol (0)

브랜드 측면이 좋습니다. 나는 연료면 계수기가 볼보에서 디젤/휘발유 자동차 수를 반환 할 것으로 기대합니다. 예컨대 : -Diesel (2) -Petrol (1)

내 코드 :

$exclude= array("brand"); 
    $q_brand = id_brand:volvo 
    $q_fuel = ""; 

    // create a client instance 
    $client = new Solarium_Client($config); 

    // get a select query instance 
    $query = $client->createSelect(); 
    $query->createFilterQuery(array('key'=>'id_brand', 'query'=>'$q_brand', 'tag'=>'brand')); 
    $query->createFilterQuery(array('key'=>'id_fuel', 'query'=>'$q_fuel', 'tag'=>'fuel')); 

    // get the facetset component 
    $facetSet = $query->getFacetSet(); 
    $facetSet->createFacetField('id_brand')->setField('id_brand')->setExcludes($exclude); 
    $facetSet->createFacetField('id_fuel')->setField('id_fuel'); 

    // this executes the query and returns the result 
    $resultset = $client->select($query); 

    // display facet counts 
    echo '<hr/>Facet counts for field "id_brand":<br/>'; 
    $facet = $resultset->getFacetSet()->getFacet('id_brand'); 
    foreach ($facet as $value => $count) { 
     echo $value . ' [' . $count . ']<br/>'; 
    } 

    // display facet counts 
    echo '<hr/>Facet counts for field "id_fuel":<br/>'; 
    $facet = $resultset->getFacetSet()->getFacet('id_fuel'); 
    foreach ($facet as $value => $count) { 
     echo $value . ' [' . $count . ']<br/>'; 
    } 
+0

이 사용하고있는 실제 코드가 될 수 없습니다, 사방에 구문 오류와 이상한 물건이있다. 샘플 .json 파일과 테스트에 사용중인 스키마가 있으면 유용 할 것입니다. – MatsLindh

답변

1

그것은 참으로 문법 실수였다. createfilterquery 배열의 'query'에 대한 인용문을 삭제했습니다. 또한 $q_brand에 따옴표를 추가했습니다. 오타 였어.

올드 :

$query->createFilterQuery(array('key'=>'id_brand', 'query'=>'$q_brand', 'tag'=>'brand')); 
$query->createFilterQuery(array('key'=>'id_fuel', 'query'=>'$q_fuel', 'tag'=>'fuel')); 

새로운 :

$query->createFilterQuery(array('key'=>'id_brand', 'query'=>$q_brand, 'tag'=>'brand')); 
$query->createFilterQuery(array('key'=>'id_fuel', 'query'=>$q_fuel, 'tag'=>'fuel'));