Exemplo n.º 1
0
 /** @internal
  * @brief Add options specific to facets
  *
  * Currently managed options are:
  * - <tt>facet stickyness</tt> to defined global et specific facet stickyness.
  * - <tt>facet order</tt> when using strict strict ordering mode.
  *
  * @param $query [in] Query along with its configuration.
  * @param $params [in-out] array of parameter to update with facet options.
  */
 private function add_facet_options(AfsQuery $query, &$params)
 {
     $facet_mgr = $query->get_facet_manager();
     if ($facet_mgr->get_default_stickyness()) {
         if (!array_key_exists('afs:facetDefault', $params)) {
             $params['afs:facetDefault'] = array();
         }
         $params['afs:facetDefault'][] = 'sticky=true';
         $default_sticky = true;
     } else {
         $default_sticky = false;
     }
     if ($facet_mgr->has_facets()) {
         if (empty($params['afs:facet'])) {
             $params['afs:facet'] = array();
         }
         foreach ($facet_mgr->get_facets() as $name => $facet) {
             $sticky = $facet_mgr->is_sticky($facet);
             if ($default_sticky != $sticky) {
                 $params['afs:facet'][] = $name . ',sticky=' . ($sticky ? 'true' : 'false');
             }
             if (!is_null($sort_order = $facet->get_values_sort_order())) {
                 list($sort, $order) = $sort_order->format();
                 $params['afs:facet'][] = $name . ',sort=' . $sort;
                 $params['afs:facet'][] = $name . ',order=' . $order;
             }
         }
     }
     if ($facet_mgr->is_facet_order_strict()) {
         $params['afs:facetOrder'] = implode(',', array_keys($facet_mgr->get_facets()));
     }
 }
Exemplo n.º 2
0
 /** @brief Constructs new instance of facet helper.
  *
  * @param $facet [in] root facet element.
  * @param $query [in] @a AfsQuery which has produced current reply.
  * @param $config [in] helper configuration object.
  */
 public function __construct($facet, AfsQuery $query, AfsHelperConfiguration $config, $feed = null)
 {
     $this->id = $facet->id;
     if (property_exists($facet, 'labels') && !empty($facet->labels)) {
         $this->labels = $facet->labels;
     }
     if (property_exists($facet, 'tags')) {
         $this->tags = $facet->tags;
     }
     $this->layout = $facet->layout;
     $this->type = $facet->type;
     if (property_exists($facet, 'sticky') && 0 == strcmp('true', $facet->sticky)) {
         $this->sticky = true;
     } else {
         $this->sticky = false;
     }
     $facet_manager = $query->get_facet_manager();
     $facet_manager->check_or_add_facet(new AfsFacet($this->id, $this->type, $this->layout));
     $builder = new AfsFacetElementBuilder($facet_manager, $query);
     $this->elements = $builder->create_elements($this->id, $facet, $config, $feed);
 }
Exemplo n.º 3
0
 public function testSmoothFacetSortOrder()
 {
     $query = new AfsQuery();
     $this->assertFalse($query->get_facet_manager()->is_facet_order_strict());
 }
Exemplo n.º 4
0
 public function testFacetStrictOrder()
 {
     $query = new AfsQuery();
     $facet_mgr = $query->get_facet_manager();
     $sort = array('FOO', 'BAR');
     $facet_mgr->set_facet_order($sort, AfsFacetOrder::STRICT);
     $this->qm->send($query);
     $params = $this->connector->get_parameters();
     $this->assertTrue(array_key_exists('afs:facetOrder', $params));
     $this->assertEquals(implode(',', $sort), $params['afs:facetOrder']);
 }
Exemplo n.º 5
0
 public function testLazyFacetOrderingMoreFacetsDeclaredThanPresentInReply()
 {
     $input = json_decode('{
         "header": {
             "query": {
                 "userId": "afd070b6-4315-40cc-975d-747e28bf132a",
                 "sessionId": "5bf5642d-a262-4608-9901-45aa6e87325d"
             },
             "performance": {
                 "durationMs": 666
             }
         },
         "replySet": [
             {
                 "meta": {
                     "uri": "Test",
                     "totalItems": 200,
                     "totalItemsIsExact": true,
                     "pageItems": 2,
                     "firstPageItem": 3,
                     "lastPageItem": 4,
                     "durationMs": 42,
                     "firstPaFId": 1,
                     "lastPaFId": 1,
                     "producer": "SEARCH"
                 },
                 "facets": {
                     "facet": [
                         {
                             "afs:t": "FacetInterval",
                             "interval": [
                                 {
                                     "key": "[3 .. 6]",
                                     "items": 1
                                 }
                             ],
                             "layout": "INTERVAL",
                             "type": "DATE",
                             "id": "Baz"
                         },
                         {
                             "afs:t": "FacetInterval",
                             "interval": [
                                 {
                                     "key": "[3 .. 6]",
                                     "items": 1
                                 }
                             ],
                             "layout": "INTERVAL",
                             "type": "INTEGER",
                             "id": "Bar"
                         },
                         {
                             "afs:t": "FacetInterval",
                             "interval": [
                                 {
                                     "key": "[0 .. 3]",
                                     "items": 1
                                 }
                             ],
                             "layout": "INTERVAL",
                             "type": "REAL",
                             "id": "Foo"
                         }
                     ]
                 }
             }
         ]
     }');
     $config = new AfsHelperConfiguration();
     $query = new AfsQuery();
     $facet_mgr = $query->get_facet_manager();
     $facet_mgr->set_facet_order(array('Foo', 'Bal', 'Bar'), AfsFacetOrder::LAX);
     $this->assertTrue($facet_mgr->has_facet('Foo'));
     $this->assertTrue($facet_mgr->has_facet('Bal'));
     $this->assertTrue($facet_mgr->has_facet('Bar'));
     $this->assertFalse($facet_mgr->has_facet('Baz'));
     $helper = new AfsReplysetHelper($input->replySet[0], $query, $config);
     $this->assertEquals(AfsFacetType::REAL_TYPE, $facet_mgr->get_facet('Foo')->get_type());
     $this->assertEquals(AfsFacetType::INTEGER_TYPE, $facet_mgr->get_facet('Bar')->get_type());
     $facets = $helper->get_facets();
     $this->assertEquals(3, count($facets));
     $this->assertEquals('Foo', $facets[0]->get_id());
     $this->assertEquals('Bar', $facets[1]->get_id());
     $this->assertEquals('Baz', $facets[2]->get_id());
 }
Exemplo n.º 6
0
 public function testFacetElementBuilderOnTreeNode()
 {
     $input = json_decode('{
         "afs:t": "FacetTree",
         "node": [
             {
                 "key": "2010",
                 "labels": [
                     {
                         "lang": "FR",
                         "region": "FR",
                         "label": "2010"
                     }
                 ],
                 "items": 24,
                 "node": [
                     {
                         "key": "2010-03",
                         "labels": [
                             {
                                 "lang": "FR",
                                 "region": "FR",
                                 "label": "03"
                             }
                         ],
                         "items": 14,
                         "node": [
                             {
                                 "key": "2010-03-07",
                                 "labels": [
                                     {
                                         "lang": "FR",
                                         "region": "FR",
                                         "label": "07"
                                     }
                                 ],
                                 "items": 4
                             }
                         ]
                     }
                 ]
             }
         ],
         "layout": "TREE",
         "type": "DATE",
         "id": "TREE_DATE",
         "labels": [
             {
                 "label": "Tree date"
             }
         ]
     }');
     $query = new AfsQuery();
     $config = new AfsHelperConfiguration();
     $config->set_helper_format(AfsHelperFormat::HELPERS);
     $facet_mgr = $query->get_facet_manager();
     $facet_mgr->add_facet(new AfsFacet('TREE_DATE', AfsFacetType::DATE_TYPE));
     $builder = new AfsFacetElementBuilder($facet_mgr, $query);
     $elems = $builder->create_elements('TREE_DATE', $input, $config);
     $this->assertEquals(count($elems), 1);
     $elem = reset($elems);
     $this->assertEquals($elem->label, '2010');
     $this->assertEquals($elem->count, 24);
     $this->assertFalse($elem->active);
     $this->assertTrue($elem->query->has_filter('TREE_DATE', '"2010"'));
     $this->assertEquals(count($elem->values), 1);
     $elem = $elem->values[0];
     $this->assertEquals($elem->label, '03');
     $this->assertEquals($elem->count, 14);
     $this->assertFalse($elem->active);
     $this->assertTrue($elem->query->has_filter('TREE_DATE', '"2010-03"'));
     $this->assertEquals(count($elem->values), 1);
     $elem = $elem->values[0];
     $this->assertEquals($elem->label, '07');
     $this->assertEquals($elem->count, 4);
     $this->assertFalse($elem->active);
     $this->assertTrue($elem->query->has_filter('TREE_DATE', '"2010-03-07"'));
     $this->assertEquals(count($elem->values), 0);
 }