Fulltext.php 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\DB\Helper\Mysql;
  7. use Magento\Framework\App\ResourceConnection;
  8. class Fulltext
  9. {
  10. /**
  11. * FULLTEXT search in MySQL search mode "natural language"
  12. */
  13. const FULLTEXT_MODE_NATURAL = 'IN NATURAL LANGUAGE MODE';
  14. /**
  15. * FULLTEXT search in MySQL search mode "natural language with query expansion"
  16. */
  17. const FULLTEXT_MODE_NATURAL_QUERY = 'IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION';
  18. /**
  19. * FULLTEXT search in MySQL search mode "boolean"
  20. */
  21. const FULLTEXT_MODE_BOOLEAN = 'IN BOOLEAN MODE';
  22. /**
  23. * FULLTEXT search in MySQL search mode "query expansion"
  24. */
  25. const FULLTEXT_MODE_QUERY = 'WITH QUERY EXPANSION';
  26. /**
  27. * FULLTEXT search in MySQL MATCH method
  28. */
  29. const MATCH = 'MATCH';
  30. /**
  31. * FULLTEXT search in MySQL AGAINST method
  32. */
  33. const AGAINST = 'AGAINST';
  34. /**
  35. * @var \Magento\Framework\DB\Adapter\AdapterInterface
  36. */
  37. private $connection;
  38. /**
  39. * @param ResourceConnection $resource
  40. */
  41. public function __construct(ResourceConnection $resource)
  42. {
  43. $this->connection = $resource->getConnection();
  44. }
  45. /**
  46. * Method for FULLTEXT search in Mysql, will generated MATCH ($columns) AGAINST ('$expression' $mode)
  47. *
  48. * @param string|string[] $columns Columns which add to MATCH ()
  49. * @param string $expression Expression which add to AGAINST ()
  50. * @param string $mode
  51. * @return string
  52. */
  53. public function getMatchQuery($columns, $expression, $mode = self::FULLTEXT_MODE_NATURAL)
  54. {
  55. if (is_array($columns)) {
  56. $columns = implode(', ', $columns);
  57. }
  58. $expression = $this->connection->quote($expression);
  59. $condition = self::MATCH . " ({$columns}) " . self::AGAINST . " ({$expression} {$mode})";
  60. return $condition;
  61. }
  62. /**
  63. * Method for FULLTEXT search in Mysql, will added generated
  64. * MATCH ($columns) AGAINST ('$expression' $mode) to where clause
  65. *
  66. * @param \Magento\Framework\DB\Select $select
  67. * @param string|string[] $columns Columns which add to MATCH ()
  68. * @param string $expression Expression which add to AGAINST ()
  69. * @param bool $isCondition true=AND, false=OR
  70. * @param string $mode
  71. * @return \Magento\Framework\DB\Select
  72. */
  73. public function match($select, $columns, $expression, $isCondition = true, $mode = self::FULLTEXT_MODE_NATURAL)
  74. {
  75. $fullCondition = $this->getMatchQuery($columns, $expression, $mode);
  76. if ($isCondition) {
  77. $select->where($fullCondition);
  78. } else {
  79. $select->orWhere($fullCondition);
  80. }
  81. return $select;
  82. }
  83. }