Suggest.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. namespace Elastica;
  3. use Elastica\Exception\NotImplementedException;
  4. use Elastica\Suggest\AbstractSuggest;
  5. /**
  6. * Class Suggest.
  7. *
  8. * @see https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters.html
  9. */
  10. class Suggest extends Param
  11. {
  12. /**
  13. * @param AbstractSuggest $suggestion
  14. */
  15. public function __construct(AbstractSuggest $suggestion = null)
  16. {
  17. if (!is_null($suggestion)) {
  18. $this->addSuggestion($suggestion);
  19. }
  20. }
  21. /**
  22. * Set the global text for this suggester.
  23. *
  24. * @param string $text
  25. *
  26. * @return $this
  27. */
  28. public function setGlobalText($text)
  29. {
  30. return $this->setParam('text', $text);
  31. }
  32. /**
  33. * Add a suggestion to this suggest clause.
  34. *
  35. * @param AbstractSuggest $suggestion
  36. *
  37. * @return $this
  38. */
  39. public function addSuggestion(AbstractSuggest $suggestion)
  40. {
  41. return $this->addParam('suggestion', $suggestion);
  42. }
  43. /**
  44. * @param Suggest|AbstractSuggest $suggestion
  45. *
  46. * @throws Exception\NotImplementedException
  47. *
  48. * @return self
  49. */
  50. public static function create($suggestion)
  51. {
  52. switch (true) {
  53. case $suggestion instanceof self:
  54. return $suggestion;
  55. case $suggestion instanceof AbstractSuggest:
  56. return new self($suggestion);
  57. }
  58. throw new NotImplementedException();
  59. }
  60. /**
  61. * {@inheritdoc}
  62. */
  63. public function toArray()
  64. {
  65. $array = parent::toArray();
  66. $baseName = $this->_getBaseName();
  67. if (isset($array[$baseName]['suggestion'])) {
  68. $suggestion = $array[$baseName]['suggestion'];
  69. unset($array[$baseName]['suggestion']);
  70. foreach ($suggestion as $key => $value) {
  71. $array[$baseName][$key] = $value;
  72. }
  73. }
  74. return $array;
  75. }
  76. }