Solr +日光浴:计数器不适用于多选择方面

时间:2014-07-16 19:00:12

标签: php solr solr4 faceted-search solarium

我正在与Solr + Solarium合作。我定义了一个多方面搜索。每个构面选项后面都有计数器,显示单击它时返回的结果数。

在多选方面中选择一个选项时,我希望其他方面的计数器仍可正常工作。

solr中有结果。在我的旧代码(单选面)中,它返回了汽油/柴油的值。

E.g。以下2个方面:

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

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

现在我希望能够选择沃尔沃和马自达。选择沃尔沃solr /日光浴后,返回以下两个方面:

品牌: -volvo(3) - 已选中 -mazda(2) -volkswagen(5)

燃料: -Diesel(0) - 控制(0)

品牌方面很好。我希望Fuel facet计数器能够从沃尔沃返回柴油/汽油车的数量。例如: -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/>';
    }

1 个答案:

答案 0 :(得分:1)

这确实是一个语法错误。我删除了'query'数组中createfilterquery的引文。我还在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'));