@@ -27,7 +27,7 @@ discard block |
||
| 27 | 27 | $this->invokeMethod($this->service, 'createIndex', array()); |
| 28 | 28 | $this->assertFalse(true, "Creation of index with unknown locale should have failed"); |
| 29 | 29 | } catch (Exception $e) { |
| 30 | - $this->assertTrue(true,"Creation of index with unknown locale failed as expected"); |
|
| 30 | + $this->assertTrue(true, "Creation of index with unknown locale failed as expected"); |
|
| 31 | 31 | } |
| 32 | 32 | |
| 33 | 33 | |
@@ -116,7 +116,7 @@ discard block |
||
| 116 | 116 | $fp->write(); |
| 117 | 117 | $this->service->getIndex()->refresh(); |
| 118 | 118 | |
| 119 | - $this->checkNumberOfIndexedDocuments($nDocsAtStart-1); |
|
| 119 | + $this->checkNumberOfIndexedDocuments($nDocsAtStart - 1); |
|
| 120 | 120 | |
| 121 | 121 | $fp->ShowInSearch = true; |
| 122 | 122 | $fp->write(); |
@@ -134,7 +134,7 @@ discard block |
||
| 134 | 134 | $fp->doUnpublish(); |
| 135 | 135 | |
| 136 | 136 | $this->service->getIndex()->refresh(); |
| 137 | - $this->checkNumberOfIndexedDocuments($nDocsAtStart-1); |
|
| 137 | + $this->checkNumberOfIndexedDocuments($nDocsAtStart - 1); |
|
| 138 | 138 | } |
| 139 | 139 | |
| 140 | 140 | |
@@ -146,7 +146,7 @@ discard block |
||
| 146 | 146 | $fp->delete(); |
| 147 | 147 | |
| 148 | 148 | $this->service->getIndex()->refresh(); |
| 149 | - $this->checkNumberOfIndexedDocuments($nDocsAtStart-1); |
|
| 149 | + $this->checkNumberOfIndexedDocuments($nDocsAtStart - 1); |
|
| 150 | 150 | } |
| 151 | 151 | |
| 152 | 152 | |
@@ -158,7 +158,7 @@ discard block |
||
| 158 | 158 | $fp->delete(); |
| 159 | 159 | |
| 160 | 160 | $this->service->getIndex()->refresh(); |
| 161 | - $this->checkNumberOfIndexedDocuments($nDocsAtStart-1); |
|
| 161 | + $this->checkNumberOfIndexedDocuments($nDocsAtStart - 1); |
|
| 162 | 162 | } |
| 163 | 163 | |
| 164 | 164 | |
@@ -177,7 +177,7 @@ discard block |
||
| 177 | 177 | //Check that the number of indexing requests has increased by 2 |
| 178 | 178 | $deltaReqs = $this->service->getIndexingRequestCtr() - $reqs; |
| 179 | 179 | //One call is made for each of Page and FlickrPhotoTO |
| 180 | - $this->assertEquals(2,$deltaReqs); |
|
| 180 | + $this->assertEquals(2, $deltaReqs); |
|
| 181 | 181 | |
| 182 | 182 | // default installed pages plus 100 FlickrPhotoTOs |
| 183 | 183 | $this->checkNumberOfIndexedDocuments(103); |
@@ -195,21 +195,21 @@ discard block |
||
| 195 | 195 | $fp = new FlickrPhotoTO(); |
| 196 | 196 | $fp->Title = 'The cat sits on the mat'; |
| 197 | 197 | $fp->write(); |
| 198 | - $this->checkNumberOfIndexedDocuments($nDocsAtStart+1); |
|
| 198 | + $this->checkNumberOfIndexedDocuments($nDocsAtStart + 1); |
|
| 199 | 199 | |
| 200 | 200 | $fp2 = new FlickrPhotoTO(); |
| 201 | 201 | $fp2->Title = 'The cat sat on the hat'; |
| 202 | 202 | $fp2->write(); |
| 203 | - $this->checkNumberOfIndexedDocuments($nDocsAtStart+2); |
|
| 203 | + $this->checkNumberOfIndexedDocuments($nDocsAtStart + 2); |
|
| 204 | 204 | |
| 205 | 205 | $fp3 = new FlickrPhotoTO(); |
| 206 | 206 | $fp3->Title = 'The bat flew around the cat'; |
| 207 | 207 | $fp3->write(); |
| 208 | - $this->checkNumberOfIndexedDocuments($nDocsAtStart+3); |
|
| 208 | + $this->checkNumberOfIndexedDocuments($nDocsAtStart + 3); |
|
| 209 | 209 | |
| 210 | 210 | //Check that the number of indexing requests has increased by 3 |
| 211 | 211 | $deltaReqs = $this->service->getIndexingRequestCtr() - $reqs; |
| 212 | - $this->assertEquals(3,$deltaReqs); |
|
| 212 | + $this->assertEquals(3, $deltaReqs); |
|
| 213 | 213 | } |
| 214 | 214 | |
| 215 | 215 | |
@@ -283,6 +283,6 @@ discard block |
||
| 283 | 283 | public function testListIndexes() { |
| 284 | 284 | $message = 'This is a test trace'; |
| 285 | 285 | $trace = $this->service->listIndexes($message); |
| 286 | - $this->assertContains('elastica_ss_module_test_en_us', print_r($trace,1)); |
|
| 286 | + $this->assertContains('elastica_ss_module_test_en_us', print_r($trace, 1)); |
|
| 287 | 287 | } |
| 288 | 288 | } |
@@ -26,7 +26,7 @@ discard block |
||
| 26 | 26 | $expected = array('first'); |
| 27 | 27 | $this->assertEquals($expected, array_keys($terms['Title.standard']['terms'])); |
| 28 | 28 | |
| 29 | - $expected = array('fi','fir','firs','first','ir','irs','irst','rs','rst','st'); |
|
| 29 | + $expected = array('fi', 'fir', 'firs', 'first', 'ir', 'irs', 'irst', 'rs', 'rst', 'st'); |
|
| 30 | 30 | $this->assertEquals($expected, array_keys($terms['Title.autocomplete']['terms'])); |
| 31 | 31 | |
| 32 | 32 | // ---- now a parental class page ---- |
@@ -60,20 +60,20 @@ discard block |
||
| 60 | 60 | $terms = $page->getTermVectors(); |
| 61 | 61 | |
| 62 | 62 | //Check the expected fields are indexed |
| 63 | - $expected = array('Content','Content.shingles','Content.standard','FatherText','FatherText.shingles','FatherText.standard', |
|
| 64 | - 'GrandFatherText','GrandFatherText.shingles','GrandFatherText.standard','Link','Title','Title.autocomplete', |
|
| 65 | - 'Title.shingles','Title.standard'); |
|
| 63 | + $expected = array('Content', 'Content.shingles', 'Content.standard', 'FatherText', 'FatherText.shingles', 'FatherText.standard', |
|
| 64 | + 'GrandFatherText', 'GrandFatherText.shingles', 'GrandFatherText.standard', 'Link', 'Title', 'Title.autocomplete', |
|
| 65 | + 'Title.shingles', 'Title.standard'); |
|
| 66 | 66 | $indexedFields = array_keys($terms); |
| 67 | 67 | sort($indexedFields); |
| 68 | 68 | foreach ($indexedFields as $field) { |
| 69 | - echo "'".$field."',"; |
|
| 69 | + echo "'" . $field . "',"; |
|
| 70 | 70 | } |
| 71 | 71 | $this->assertEquals($expected, $indexedFields); |
| 72 | 72 | |
| 73 | 73 | $fatherTerms = $terms['FatherText.standard']['terms']; |
| 74 | 74 | $grandFatherTerms = $terms['GrandFatherText.standard']['terms']; |
| 75 | 75 | |
| 76 | - $expected = array('father', 'field', 'grandfather', 'page', 'trace3');; |
|
| 76 | + $expected = array('father', 'field', 'grandfather', 'page', 'trace3'); ; |
|
| 77 | 77 | $this->assertEquals($expected, array_keys($fatherTerms)); |
| 78 | 78 | |
| 79 | 79 | $expected = array('grandfather', 'page', 'trace4'); |
@@ -25,11 +25,11 @@ discard block |
||
| 25 | 25 | // don't check the server name as this will differ, just check the path is /search/ |
| 26 | 26 | $uri = $searchPage->SearchPageURI('testsearchpage'); |
| 27 | 27 | $splits = explode('/', $uri); |
| 28 | - $this->assertEquals($splits[3],'search'); |
|
| 28 | + $this->assertEquals($splits[3], 'search'); |
|
| 29 | 29 | |
| 30 | 30 | // check the form |
| 31 | 31 | $form = $searchPage->SearchPageForm('testsearchpage'); |
| 32 | - $this->assertInstanceOf('ElasticSearchForm',$form); |
|
| 32 | + $this->assertInstanceOf('ElasticSearchForm', $form); |
|
| 33 | 33 | |
| 34 | 34 | $fields = $form->Fields(); |
| 35 | 35 | $actions = $form->Actions(); |
@@ -45,7 +45,7 @@ discard block |
||
| 45 | 45 | public function testButtonOverride() { |
| 46 | 46 | $searchPage = $this->objFromFixture('ElasticSearchPage', 'search'); |
| 47 | 47 | $buttonText = 'Search Me!'; |
| 48 | - $form = $searchPage->SearchPageForm('testsearchpage',$buttonText); |
|
| 48 | + $form = $searchPage->SearchPageForm('testsearchpage', $buttonText); |
|
| 49 | 49 | $actions = $form->Actions(); |
| 50 | 50 | $this->assertEquals($buttonText, $actions->FieldByName('action_submit')->Title()); |
| 51 | 51 | } |
@@ -86,12 +86,12 @@ discard block |
||
| 86 | 86 | $esp = new ElasticSearchPage(); |
| 87 | 87 | // ensure default identifier |
| 88 | 88 | $esp->Identifier = $searchPage->Identifier; |
| 89 | - $esp->Title='This should not be saved'; |
|
| 89 | + $esp->Title = 'This should not be saved'; |
|
| 90 | 90 | try { |
| 91 | 91 | $esp->write(); |
| 92 | 92 | $this->assertFalse(true, 'Duplicate identifier was incorrectly saved'); |
| 93 | 93 | } catch (Exception $e) { |
| 94 | - $this->assertTrue(true,'The page could not be saved as expected, due to duplicate '. |
|
| 94 | + $this->assertTrue(true, 'The page could not be saved as expected, due to duplicate ' . |
|
| 95 | 95 | 'identifier'); |
| 96 | 96 | } |
| 97 | 97 | } |
@@ -434,11 +434,11 @@ discard block |
||
| 434 | 434 | |
| 435 | 435 | |
| 436 | 436 | |
| 437 | - $query = new Query(); |
|
| 438 | - $query->setParams(array('query' => array('more_like_this' => $mlt))); |
|
| 437 | + $query = new Query(); |
|
| 438 | + $query->setParams(array('query' => array('more_like_this' => $mlt))); |
|
| 439 | 439 | |
| 440 | 440 | |
| 441 | - $elasticService = \Injector::inst()->create('SilverStripe\Elastica\ElasticaService'); |
|
| 441 | + $elasticService = \Injector::inst()->create('SilverStripe\Elastica\ElasticaService'); |
|
| 442 | 442 | $elasticService->setLocale($this->locale); |
| 443 | 443 | if ($testMode) { |
| 444 | 444 | $elasticService->setTestMode(true); |
@@ -450,7 +450,7 @@ discard block |
||
| 450 | 450 | $query->setFrom($this->start); |
| 451 | 451 | |
| 452 | 452 | $resultList = new ResultList($elasticService, $query, null); |
| 453 | - // at this point ResultList object, not yet executed search query |
|
| 453 | + // at this point ResultList object, not yet executed search query |
|
| 454 | 454 | $paginated = new \PaginatedList( |
| 455 | 455 | $resultList |
| 456 | 456 | ); |
@@ -230,6 +230,10 @@ discard block |
||
| 230 | 230 | /* |
| 231 | 231 | Set the highlight fields for subsequent searches |
| 232 | 232 | */ |
| 233 | + |
|
| 234 | + /** |
|
| 235 | + * @param string[] $newHighlightedFields |
|
| 236 | + */ |
|
| 233 | 237 | public function setHighlightedFields($newHighlightedFields) { |
| 234 | 238 | $this->highlightedFields = $newHighlightedFields; |
| 235 | 239 | } |
@@ -242,7 +246,7 @@ discard block |
||
| 242 | 246 | * @param string $queryText query string, e.g. 'New Zealand' |
| 243 | 247 | * @param array $fieldsToSearch Mapping of name to an array of mapping Weight and Elastic mapping, |
| 244 | 248 | * e.g. array('Title' => array('Weight' => 2, 'Type' => 'string')) |
| 245 | - * @return ArrayList SilverStripe DataObjects returned from the search against ElasticSearch |
|
| 249 | + * @return \PaginatedList SilverStripe DataObjects returned from the search against ElasticSearch |
|
| 246 | 250 | */ |
| 247 | 251 | public function search($queryText, $fieldsToSearch = null, $testMode = false) { |
| 248 | 252 | if ($this->locale == null) { |
@@ -307,6 +311,10 @@ discard block |
||
| 307 | 311 | |
| 308 | 312 | |
| 309 | 313 | /* Perform an autocomplete search */ |
| 314 | + |
|
| 315 | + /** |
|
| 316 | + * @param string $queryText |
|
| 317 | + */ |
|
| 310 | 318 | public function autocomplete_search($queryText, $field) { |
| 311 | 319 | if ($this->locale == null) { |
| 312 | 320 | if (class_exists('Translatable') && \SiteTree::has_extension('Translatable')) { |
@@ -358,11 +366,11 @@ discard block |
||
| 358 | 366 | |
| 359 | 367 | /** |
| 360 | 368 | * Perform a 'More Like This' search, aka relevance feedback, using the provided indexed DataObject |
| 361 | - * @param DataObject $indexedItem A DataObject that has been indexed in Elasticsearch |
|
| 369 | + * @param \DataObject|null $indexedItem A DataObject that has been indexed in Elasticsearch |
|
| 362 | 370 | * @param array $fieldsToSearch array of fieldnames to search, mapped to weighting |
| 363 | 371 | * @param $$testMode Use all shards, not just one, for consistent results during unit testing. See |
| 364 | 372 | * https://www.elastic.co/guide/en/elasticsearch/guide/current/relevance-is-broken.html#relevance-is-broken |
| 365 | - * @return resultList List of results |
|
| 373 | + * @return \PaginatedList List of results |
|
| 366 | 374 | */ |
| 367 | 375 | public function moreLikeThis($indexedItem, $fieldsToSearch, $testMode = false) { |
| 368 | 376 | echo "INDEXED ITEM:".$indexedItem; |
@@ -469,6 +477,9 @@ discard block |
||
| 469 | 477 | return $result; |
| 470 | 478 | } |
| 471 | 479 | |
| 480 | + /** |
|
| 481 | + * @return string |
|
| 482 | + */ |
|
| 472 | 483 | public function getSuggestedQuery() { |
| 473 | 484 | return $this->SuggestedQuery; |
| 474 | 485 | } |
@@ -244,7 +244,7 @@ discard block |
||
| 244 | 244 | * e.g. array('Title' => array('Weight' => 2, 'Type' => 'string')) |
| 245 | 245 | * @return ArrayList SilverStripe DataObjects returned from the search against ElasticSearch |
| 246 | 246 | */ |
| 247 | - public function search($queryText, $fieldsToSearch = null, $testMode = false) { |
|
| 247 | + public function search($queryText, $fieldsToSearch = null, $testMode = false) { |
|
| 248 | 248 | if ($this->locale == null) { |
| 249 | 249 | if (class_exists('Translatable') && \SiteTree::has_extension('Translatable')) { |
| 250 | 250 | $this->locale = \Translatable::get_current_locale(); |
@@ -365,14 +365,14 @@ discard block |
||
| 365 | 365 | * @return resultList List of results |
| 366 | 366 | */ |
| 367 | 367 | public function moreLikeThis($indexedItem, $fieldsToSearch, $testMode = false) { |
| 368 | - echo "INDEXED ITEM:".$indexedItem; |
|
| 368 | + echo "INDEXED ITEM:" . $indexedItem; |
|
| 369 | 369 | |
| 370 | 370 | if ($indexedItem == null) { |
| 371 | 371 | throw new \InvalidArgumentException('A searchable item cannot be null'); |
| 372 | 372 | } |
| 373 | 373 | |
| 374 | 374 | if (!$indexedItem->hasExtension('SilverStripe\Elastica\Searchable')) { |
| 375 | - throw new \InvalidArgumentException('Objects of class '.$indexedItem->ClassName.' are not searchable'); |
|
| 375 | + throw new \InvalidArgumentException('Objects of class ' . $indexedItem->ClassName . ' are not searchable'); |
|
| 376 | 376 | } |
| 377 | 377 | |
| 378 | 378 | if ($fieldsToSearch == null) { |
@@ -396,7 +396,7 @@ discard block |
||
| 396 | 396 | if (!is_numeric($weighting)) { |
| 397 | 397 | throw new \InvalidArgumentException('Fields must be of the form fieldname => weight'); |
| 398 | 398 | } |
| 399 | - $weightedField = $field.'^'.$weighting; |
|
| 399 | + $weightedField = $field . '^' . $weighting; |
|
| 400 | 400 | $weightedField = str_replace('^1', '', $weightedField); |
| 401 | 401 | array_push($weightedFieldsArray, $weightedField); |
| 402 | 402 | } |
@@ -28,7 +28,7 @@ |
||
| 28 | 28 | $germanWithURLs = array( |
| 29 | 29 | 'tokenizer' => 'uax_url_email', |
| 30 | 30 | //'filter' => array('english_possessive_stemmer', 'lowercase', 'english_stop', /*'english_keywords',*/ 'english_stemmer' ), |
| 31 | - 'filter' => array('no_single_chars', 'german_snowball', 'lowercase', 'german_stop' ), |
|
| 31 | + 'filter' => array('no_single_chars', 'german_snowball', 'lowercase', 'german_stop'), |
|
| 32 | 32 | 'type' => 'custom' |
| 33 | 33 | ); |
| 34 | 34 | |
@@ -214,7 +214,7 @@ |
||
| 214 | 214 | $analyzers['folded'] = $analyzerFolded; |
| 215 | 215 | } |
| 216 | 216 | |
| 217 | - //Store bigrams in the index, namely pairs of words |
|
| 217 | + //Store bigrams in the index, namely pairs of words |
|
| 218 | 218 | $this->addFilter('filter_shingle', array( |
| 219 | 219 | 'type' => 'shingle', |
| 220 | 220 | 'min_shingle_size' => 2, |
@@ -177,10 +177,10 @@ discard block |
||
| 177 | 177 | 'type' => 'nGram', |
| 178 | 178 | 'min_gram' => 2, |
| 179 | 179 | 'max_gram' => 20, |
| 180 | - 'token_chars' => array('letter', 'digit','punctuation', 'symbol') |
|
| 180 | + 'token_chars' => array('letter', 'digit', 'punctuation', 'symbol') |
|
| 181 | 181 | )); |
| 182 | 182 | |
| 183 | - $this->addAnalyzer('autocomplete_index_analyzer',array( |
|
| 183 | + $this->addAnalyzer('autocomplete_index_analyzer', array( |
|
| 184 | 184 | 'type' => 'custom', |
| 185 | 185 | 'tokenizer' => 'whitespace', |
| 186 | 186 | 'filter' => array( |
@@ -190,7 +190,7 @@ discard block |
||
| 190 | 190 | ) |
| 191 | 191 | )); |
| 192 | 192 | |
| 193 | - $this->addAnalyzer('autocomplete_search_analyzer',array( |
|
| 193 | + $this->addAnalyzer('autocomplete_search_analyzer', array( |
|
| 194 | 194 | 'type' => 'custom', |
| 195 | 195 | 'tokenizer' => 'whitespace', |
| 196 | 196 | 'filter' => array( |
@@ -47,7 +47,7 @@ |
||
| 47 | 47 | $englishWithURLs = array( |
| 48 | 48 | 'tokenizer' => 'uax_url_email', |
| 49 | 49 | //'filter' => array('english_possessive_stemmer', 'lowercase', 'english_stop', /*'english_keywords',*/ 'english_stemmer' ), |
| 50 | - 'filter' => array('no_single_chars', 'english_snowball', 'lowercase', $this->stopWordFilter ), |
|
| 50 | + 'filter' => array('no_single_chars', 'english_snowball', 'lowercase', $this->stopWordFilter), |
|
| 51 | 51 | 'type' => 'custom' |
| 52 | 52 | ); |
| 53 | 53 | |
@@ -24,7 +24,7 @@ |
||
| 24 | 24 | * Execute the task to delete the currently configured index |
| 25 | 25 | */ |
| 26 | 26 | public function run($request) { |
| 27 | - $message = function ($content) { |
|
| 27 | + $message = function($content) { |
|
| 28 | 28 | print(\Director::is_cli() ? "$content\n" : "<p>$content</p>"); |
| 29 | 29 | }; |
| 30 | 30 | |
@@ -27,12 +27,12 @@ discard block |
||
| 27 | 27 | */ |
| 28 | 28 | |
| 29 | 29 | public function run($request) { |
| 30 | - $message = function ($content) { |
|
| 30 | + $message = function($content) { |
|
| 31 | 31 | print(\Director::is_cli() ? "$content\n" : "<p>$content</p>"); |
| 32 | 32 | }; |
| 33 | 33 | |
| 34 | 34 | $locales = array(); |
| 35 | - if(class_exists('Translatable') && singleton('SiteTree')->hasExtension('Translatable')) { |
|
| 35 | + if (class_exists('Translatable') && singleton('SiteTree')->hasExtension('Translatable')) { |
|
| 36 | 36 | foreach (\Translatable::get_existing_content_languages('SiteTree') as $code => $val) { |
| 37 | 37 | array_push($locales, $code); |
| 38 | 38 | } |
@@ -43,7 +43,7 @@ discard block |
||
| 43 | 43 | // now iterate all the locales indexing each locale in turn using it's owner index settings |
| 44 | 44 | foreach ($locales as $locale) { |
| 45 | 45 | Searchable::$index_ctr = 0; |
| 46 | - $message('Indexing locale '.$locale); |
|
| 46 | + $message('Indexing locale ' . $locale); |
|
| 47 | 47 | |
| 48 | 48 | if (class_exists('Translatable')) { |
| 49 | 49 | \Translatable::set_current_locale($locale); |
@@ -62,10 +62,10 @@ discard block |
||
| 62 | 62 | $this->service->refresh(); |
| 63 | 63 | // display indexing speed stats |
| 64 | 64 | $endTime = microtime(true); |
| 65 | - $elapsed = $endTime-$startTime; |
|
| 65 | + $elapsed = $endTime - $startTime; |
|
| 66 | 66 | $perSecond = Searchable::$index_ctr / $elapsed; |
| 67 | - $info = "\nReindexing $locale completed \n ".Searchable::$index_ctr." docs in ".round($elapsed,2)." seconds "; |
|
| 68 | - $info .= "at ".round($perSecond,2)." documents per second\n\n"; |
|
| 67 | + $info = "\nReindexing $locale completed \n " . Searchable::$index_ctr . " docs in " . round($elapsed, 2) . " seconds "; |
|
| 68 | + $info .= "at " . round($perSecond, 2) . " documents per second\n\n"; |
|
| 69 | 69 | $message($info); |
| 70 | 70 | } |
| 71 | 71 | |