@@ -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 | } |
@@ -141,7 +141,7 @@ discard block |
||
| 141 | 141 | $types = explode(',', $types); |
| 142 | 142 | } |
| 143 | 143 | |
| 144 | - $data = $query->toArray(); |
|
| 144 | + $data = $query->toArray(); |
|
| 145 | 145 | if (isset($data['query']['more_like_this'])) { |
| 146 | 146 | $query->MoreLikeThis = true; |
| 147 | 147 | } else { |
@@ -164,21 +164,21 @@ discard block |
||
| 164 | 164 | if ($query->MoreLikeThis) { |
| 165 | 165 | $path = $search->getPath(); |
| 166 | 166 | |
| 167 | - $termData = array(); |
|
| 168 | - $termData['query'] = $data['query']; |
|
| 167 | + $termData = array(); |
|
| 168 | + $termData['query'] = $data['query']; |
|
| 169 | 169 | |
| 170 | - $path = str_replace('_search', '_validate/query', $path); |
|
| 171 | - $params = array('explain' => true, 'rewrite' => true); |
|
| 172 | - if ($this->test_mode) { |
|
| 173 | - $params['search_type'] = Search::OPTION_SEARCH_TYPE_DFS_QUERY_THEN_FETCH; |
|
| 174 | - } |
|
| 170 | + $path = str_replace('_search', '_validate/query', $path); |
|
| 171 | + $params = array('explain' => true, 'rewrite' => true); |
|
| 172 | + if ($this->test_mode) { |
|
| 173 | + $params['search_type'] = Search::OPTION_SEARCH_TYPE_DFS_QUERY_THEN_FETCH; |
|
| 174 | + } |
|
| 175 | 175 | |
| 176 | - $response = $this->getClient()->request( |
|
| 177 | - $path, |
|
| 178 | - \Elastica\Request::GET, |
|
| 179 | - $termData, |
|
| 180 | - $params |
|
| 181 | - ); |
|
| 176 | + $response = $this->getClient()->request( |
|
| 177 | + $path, |
|
| 178 | + \Elastica\Request::GET, |
|
| 179 | + $termData, |
|
| 180 | + $params |
|
| 181 | + ); |
|
| 182 | 182 | |
| 183 | 183 | $r = $response->getData(); |
| 184 | 184 | $terms = null; // keep in scope |
@@ -194,14 +194,14 @@ discard block |
||
| 194 | 194 | } |
| 195 | 195 | } |
| 196 | 196 | |
| 197 | - if (!$empty($types)) { |
|
| 198 | - foreach($types as $type) { |
|
| 199 | - $search->addType($type); |
|
| 200 | - } |
|
| 201 | - } |
|
| 197 | + if (!$empty($types)) { |
|
| 198 | + foreach($types as $type) { |
|
| 199 | + $search->addType($type); |
|
| 200 | + } |
|
| 201 | + } |
|
| 202 | 202 | |
| 203 | - $path = $search->getPath(); |
|
| 204 | - $params = $search->getOptions(); |
|
| 203 | + $path = $search->getPath(); |
|
| 204 | + $params = $search->getOptions(); |
|
| 205 | 205 | |
| 206 | 206 | $highlightsCfg = \Config::inst()->get('Elastica', 'Highlights'); |
| 207 | 207 | $preTags = $highlightsCfg['PreTags']; |
@@ -269,14 +269,14 @@ discard block |
||
| 269 | 269 | } |
| 270 | 270 | |
| 271 | 271 | |
| 272 | - $path = $search->getPath(); |
|
| 273 | - $params = $search->getOptions(); |
|
| 272 | + $path = $search->getPath(); |
|
| 273 | + $params = $search->getOptions(); |
|
| 274 | 274 | $searchResults = $search->search($query, $params); |
| 275 | 275 | if (isset($this->MoreLikeThisTerms)) { |
| 276 | 276 | $searchResults->MoreLikeThisTerms = $this->MoreLikeThisTerms; |
| 277 | 277 | } |
| 278 | 278 | |
| 279 | - return $searchResults; |
|
| 279 | + return $searchResults; |
|
| 280 | 280 | } |
| 281 | 281 | |
| 282 | 282 | |
@@ -350,11 +350,11 @@ discard block |
||
| 350 | 350 | |
| 351 | 351 | public function listIndexes($trace) { |
| 352 | 352 | $command = "curl 'localhost:9200/_cat/indices?v'"; |
| 353 | - exec($command,$op); |
|
| 354 | - ElasticaUtil::message("\n++++ $trace ++++\n"); |
|
| 355 | - ElasticaUtil::message(print_r($op,1)); |
|
| 356 | - ElasticaUtil::message("++++ /{$trace} ++++\n\n"); |
|
| 357 | - return $op; |
|
| 353 | + exec($command,$op); |
|
| 354 | + ElasticaUtil::message("\n++++ $trace ++++\n"); |
|
| 355 | + ElasticaUtil::message(print_r($op,1)); |
|
| 356 | + ElasticaUtil::message("++++ /{$trace} ++++\n\n"); |
|
| 357 | + return $op; |
|
| 358 | 358 | } |
| 359 | 359 | |
| 360 | 360 | |
@@ -525,11 +525,11 @@ discard block |
||
| 525 | 525 | } else { |
| 526 | 526 | $class = new \ReflectionClass($classname); |
| 527 | 527 | while ($class = $class->getParentClass()) { |
| 528 | - $parentClass = $class->getName(); |
|
| 529 | - if ($parentClass == 'SiteTree') { |
|
| 530 | - $inSiteTree = true; |
|
| 531 | - break; |
|
| 532 | - } |
|
| 528 | + $parentClass = $class->getName(); |
|
| 529 | + if ($parentClass == 'SiteTree') { |
|
| 530 | + $inSiteTree = true; |
|
| 531 | + break; |
|
| 532 | + } |
|
| 533 | 533 | } |
| 534 | 534 | self::$site_tree_classes[$classname] = $inSiteTree; |
| 535 | 535 | } |
@@ -683,15 +683,15 @@ discard block |
||
| 683 | 683 | //FlickrPhoto/3829/_termvector |
| 684 | 684 | $path = $this->getIndex()->getName().'/'.$searchable->ClassName.'/'.$searchable->ID.'/_termvector'; |
| 685 | 685 | $response = $this->getClient()->request( |
| 686 | - $path, |
|
| 687 | - \Elastica\Request::GET, |
|
| 688 | - $data, |
|
| 689 | - $params |
|
| 690 | - ); |
|
| 686 | + $path, |
|
| 687 | + \Elastica\Request::GET, |
|
| 688 | + $data, |
|
| 689 | + $params |
|
| 690 | + ); |
|
| 691 | 691 | |
| 692 | 692 | |
| 693 | - $data = $response->getData(); |
|
| 694 | - return $data['term_vectors']; |
|
| 693 | + $data = $response->getData(); |
|
| 694 | + return $data['term_vectors']; |
|
| 695 | 695 | } |
| 696 | 696 | |
| 697 | 697 | } |