function testPartialUpdate() { $initialSource = new Search_ContentSource_Static(array('HomePage' => array('data' => 'initial'), 'SomePage' => array('data' => 'initial'), 'Untouchable' => array('data' => 'initial')), array('data' => 'sortable')); $finalSource = new Search_ContentSource_Static(array('SomePage' => array('data' => 'final'), 'OtherPage' => array('data' => 'final'), 'Untouchable' => array('data' => 'final')), array('data' => 'sortable')); $dir = dirname(__FILE__) . '/test_index'; $edir = escapeshellarg($dir); `rm -Rf {$edir}`; $index = new Search_Lucene_Index($dir); $indexer = new Search_Indexer($index); $indexer->addContentSource('wiki page', $initialSource); $indexer->rebuild(); $indexer = new Search_Indexer($index); $indexer->addContentSource('wiki page', $finalSource); $indexer->update(array(array('object_type' => 'wiki page', 'object_id' => 'HomePage'), array('object_type' => 'wiki page', 'object_id' => 'SomePage'), array('object_type' => 'wiki page', 'object_id' => 'OtherPage'))); $query = new Search_Query(); $query->filterType('wiki page'); $result = $query->search($index); $this->assertEquals(3, count($result)); $doc0 = $result[0]; $doc1 = $result[1]; $doc2 = $result[2]; $this->assertEquals('Untouchable', $doc0['object_id']); $this->assertEquals('initial', $doc0['data']); $this->assertEquals('final', $doc1['data']); $this->assertEquals('final', $doc2['data']); `rm -Rf {$edir}`; }
/** * @dataProvider sortCases */ function testOrdering($mode, $expected) { $query = new Search_Query(); $query->filterType('wiki page'); $query->setOrder($mode); $results = $query->search($this->index); $this->assertOrderIs($expected, $results); }
function testFilterType() { $index = new Search_Index_Memory(); $query = new Search_Query('hello'); $query->filterType('wiki page'); $query->search($index); $expr = new Search_Expr_And(array(new Search_Expr_Token('hello', 'plaintext', 'contents'), new Search_Expr_Token('wiki page', 'identifier', 'object_type'))); $this->assertEquals($expr, $index->getLastQuery()); }
function testRequireFacet() { $facet = new Search_Query_Facet_Term('categories'); $query = new Search_Query(); $query->filterType('wiki page'); $query->requestFacet($facet); $result = $query->search($this->index); $values = $result->getFacet($facet); $this->assertEquals(new Search_ResultSet_FacetFilter($facet, array(array('value' => 1, 'count' => 3), array('value' => 2, 'count' => 2), array('value' => 'orphan', 'count' => 1), array('value' => 3, 'count' => 1))), $values); }
private function assertResultCorrect($count, $from, $perPage, $first, $last) { $this->addDocuments($count); $query = new Search_Query(); $query->filterType('article'); $query->setRange($from, $perPage); $result = $query->search($this->index); $this->assertEquals($count, count($result), 'total count'); $real = array(); foreach ($result as $hit) { $real[] = $hit; } $this->assertEquals($first, $real[0]['object_id'], 'first entry'); $this->assertEquals($last, $real[count($real) - 1]['object_id'], 'last entry'); }
function testFilterIdentifierExactly() { $query = new Search_Query(); $query->filterType('wikipage?!'); $this->assertGreaterThan(0, count($query->search($this->index))); }
private function cs_dataappend_type(Search_Query $query, $config, $value) { if ($config['type'] != 'text') { if (!empty($config['_value'])) { $value = $config['_value']; $query->filterType($value); } elseif ($value) { $query->filterType($value); } } }
function buildQuery(array $filter) { $categlib = TikiLib::lib('categ'); $query = new Search_Query(); $query->setWeightCalculator($this->getWeightCalculator()); if (!Perms::get()->admin) { $query->filterPermissions(Perms::get()->getGroups()); } $jail_query = ''; if ($jail = $categlib->get_jail()) { $i = 0; foreach ($jail as $cat) { $i++; $jail_query .= $cat; if ($i < count($jail)) { $jail_query .= ' or '; } } $query->filterCategory($jail_query, true); } if (isset($filter['type']) && $filter['type']) { $query->filterType($filter['type']); } if (isset($filter['categories']) && $filter['categories']) { $query->filterCategory($filter['categories'], isset($filter['deep'])); } if (isset($filter['tags']) && $filter['tags']) { $query->filterTags($filter['tags']); } if (isset($filter['content']) && $filter['content']) { $query->filterContent($filter['content'], TikiLib::lib('tiki')->get_preference('unified_default_content', array('contents'), true)); } if (isset($filter['autocomplete']) && $filter['autocomplete']) { $query->filterInitial($filter['autocomplete']); } if (isset($filter['language']) && $filter['language']) { $q = $filter['language']; if (preg_match('/^\\w+\\-\\w+$/', $q)) { $q = "\"{$q}\""; } if (isset($filter['language_unspecified'])) { $q = "({$q}) or unknown"; } $query->filterLanguage($q); } unset($filter['type']); unset($filter['categories']); unset($filter['deep']); unset($filter['tags']); unset($filter['content']); unset($filter['language']); unset($filter['autocomplete']); foreach ($filter as $key => $value) { if ($value) { $query->filterContent($value, $key); } } return $query; }