Match.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <?php
  2. namespace Elastica\Query;
  3. /**
  4. * Match query.
  5. *
  6. * @author F21
  7. * @author WONG Wing Lun <luiges90@gmail.com>
  8. *
  9. * @see https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html
  10. */
  11. class Match extends AbstractQuery
  12. {
  13. const OPERATOR_OR = 'or';
  14. const OPERATOR_AND = 'and';
  15. const ZERO_TERM_NONE = 'none';
  16. const ZERO_TERM_ALL = 'all';
  17. const FUZZINESS_AUTO = 'AUTO';
  18. /**
  19. * @param string $field
  20. * @param mixed $values
  21. */
  22. public function __construct($field = null, $values = null)
  23. {
  24. if (null !== $field && null !== $values) {
  25. $this->setParam($field, $values);
  26. }
  27. }
  28. /**
  29. * Sets a param for the message array.
  30. *
  31. * @param string $field
  32. * @param mixed $values
  33. *
  34. * @return $this
  35. */
  36. public function setField($field, $values)
  37. {
  38. return $this->setParam($field, $values);
  39. }
  40. /**
  41. * Sets a param for the given field.
  42. *
  43. * @param string $field
  44. * @param string $key
  45. * @param string $value
  46. *
  47. * @return $this
  48. */
  49. public function setFieldParam($field, $key, $value)
  50. {
  51. if (!isset($this->_params[$field])) {
  52. $this->_params[$field] = [];
  53. }
  54. $this->_params[$field][$key] = $value;
  55. return $this;
  56. }
  57. /**
  58. * Sets the query string.
  59. *
  60. * @param string $field
  61. * @param string $query
  62. *
  63. * @return $this
  64. */
  65. public function setFieldQuery($field, $query)
  66. {
  67. return $this->setFieldParam($field, 'query', $query);
  68. }
  69. /**
  70. * Set field operator.
  71. *
  72. * @param string $field
  73. * @param string $operator
  74. *
  75. * @return $this
  76. */
  77. public function setFieldOperator($field, $operator = self::OPERATOR_OR)
  78. {
  79. return $this->setFieldParam($field, 'operator', $operator);
  80. }
  81. /**
  82. * Set field analyzer.
  83. *
  84. * @param string $field
  85. * @param string $analyzer
  86. *
  87. * @return $this
  88. */
  89. public function setFieldAnalyzer($field, $analyzer)
  90. {
  91. return $this->setFieldParam($field, 'analyzer', $analyzer);
  92. }
  93. /**
  94. * Set field boost value.
  95. *
  96. * If not set, defaults to 1.0.
  97. *
  98. * @param string $field
  99. * @param float $boost
  100. *
  101. * @return $this
  102. */
  103. public function setFieldBoost($field, $boost = 1.0)
  104. {
  105. return $this->setFieldParam($field, 'boost', (float) $boost);
  106. }
  107. /**
  108. * Set field minimum should match.
  109. *
  110. * @param string $field
  111. * @param int|string $minimumShouldMatch
  112. *
  113. * @return $this
  114. *
  115. * @see Possible values for minimum_should_match https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-minimum-should-match.html
  116. */
  117. public function setFieldMinimumShouldMatch($field, $minimumShouldMatch)
  118. {
  119. return $this->setFieldParam($field, 'minimum_should_match', $minimumShouldMatch);
  120. }
  121. /**
  122. * Set field fuzziness.
  123. *
  124. * @param string $field
  125. * @param mixed $fuzziness
  126. *
  127. * @return $this
  128. */
  129. public function setFieldFuzziness($field, $fuzziness)
  130. {
  131. return $this->setFieldParam($field, 'fuzziness', $fuzziness);
  132. }
  133. /**
  134. * Set field fuzzy rewrite.
  135. *
  136. * @param string $field
  137. * @param string $fuzzyRewrite
  138. *
  139. * @return $this
  140. */
  141. public function setFieldFuzzyRewrite($field, $fuzzyRewrite)
  142. {
  143. return $this->setFieldParam($field, 'fuzzy_rewrite', $fuzzyRewrite);
  144. }
  145. /**
  146. * Set field prefix length.
  147. *
  148. * @param string $field
  149. * @param int $prefixLength
  150. *
  151. * @return $this
  152. */
  153. public function setFieldPrefixLength($field, $prefixLength)
  154. {
  155. return $this->setFieldParam($field, 'prefix_length', (int) $prefixLength);
  156. }
  157. /**
  158. * Set field max expansions.
  159. *
  160. * @param string $field
  161. * @param int $maxExpansions
  162. *
  163. * @return $this
  164. */
  165. public function setFieldMaxExpansions($field, $maxExpansions)
  166. {
  167. return $this->setFieldParam($field, 'max_expansions', (int) $maxExpansions);
  168. }
  169. /**
  170. * Set zero terms query.
  171. *
  172. * If not set, default to 'none'
  173. *
  174. * @param string $field
  175. * @param string $zeroTermQuery
  176. *
  177. * @return $this
  178. */
  179. public function setFieldZeroTermsQuery($field, $zeroTermQuery = self::ZERO_TERM_NONE)
  180. {
  181. return $this->setFieldParam($field, 'zero_terms_query', $zeroTermQuery);
  182. }
  183. /**
  184. * Set cutoff frequency.
  185. *
  186. * @param string $field
  187. * @param float $cutoffFrequency
  188. *
  189. * @return $this
  190. */
  191. public function setFieldCutoffFrequency($field, $cutoffFrequency)
  192. {
  193. return $this->setFieldParam($field, 'cutoff_frequency', $cutoffFrequency);
  194. }
  195. }