/** * @dataProvider termProvider */ public function testRebuildSearchKey($languageCode, $termText, $searchText, $matches) { /* @var TermSqlIndex $termCache */ $termCache = WikibaseRepo::getDefaultInstance()->getStore()->getTermIndex(); // make term in item $item = new Item(new ItemId('Q42')); $item->setLabel($languageCode, $termText); // save term $termCache->clear(); $termCache->saveTermsOfEntity($item); // remove search key $dbw = wfGetDB(DB_MASTER); $dbw->update($termCache->getTableName(), array('term_search_key' => ''), array(), __METHOD__); // rebuild search key $builder = new TermSearchKeyBuilder($termCache); $builder->setRebuildAll(true); $builder->rebuildSearchKey(); // remove search key $term = new TermIndexEntry(); $term->setLanguage($languageCode); $term->setText($searchText); $options = array('caseSensitive' => false); $obtainedTerms = $termCache->getMatchingTerms(array($term), TermIndexEntry::TYPE_LABEL, Item::ENTITY_TYPE, $options); $this->assertEquals($matches ? 1 : 0, count($obtainedTerms)); if ($matches) { $obtainedTerm = array_shift($obtainedTerms); $this->assertEquals($termText, $obtainedTerm->getText()); } }
/** * @see LoggedUpdateMaintenance::doDBUpdates * * @return bool */ public function doDBUpdates() { if (!defined('WB_VERSION')) { $this->output("You need to have Wikibase enabled in order to use this maintenance script!\n\n"); exit; } $reporter = new ObservableMessageReporter(); $reporter->registerReporterCallback(array($this, 'report')); $table = WikibaseRepo::getDefaultInstance()->getStore()->getTermIndex(); $builder = new TermSearchKeyBuilder($table); $builder->setReporter($reporter); $builder->setBatchSize((int) $this->getOption('batch-size', 100)); $builder->setRebuildAll(!$this->getOption('only-missing', false)); $builder->setFromId((int) $this->getOption('start-row', 1)); $n = $builder->rebuildSearchKey(); $this->output("Done. Updated {$n} search keys.\n"); return true; }