2014-07-16 26 views
1

我正在使用Solr + Solarium。我已經定義了多方面搜索。每個方面選項都有其後的計數器,顯示點擊它們時返回結果的數量。Solr +日光浴室:計數器不適用於多個選擇方面

當在多選方面中選擇一個選項時,我希望其他方面的計數器仍然有效。

有在solr的結果。在我的舊代碼(單一選擇方面)中,它返回了汽油/柴油的值。

E.g.以下2個方面:

汽車品牌: -volvo(3) -mazda(2) -volkswagen(5)

燃料: -Diesel(4) -Petrol(6)

現在我想能夠選擇沃爾沃和馬自達。選擇沃爾沃的solr /日光浴之後返回以下2個方面:

商標: -volvo(3) - 選擇 -mazda(2) -volkswagen(5)

燃料: -Diesel(0 ) -Petrol(0)

品牌方面很好。我希望Fuel facet counter能夠從volvo中返回柴油/汽油車的數量。 E.g: -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'的報價。我還爲var $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'));