34 private $replaceSymbols = [];
44 private $fulltextHelper;
49 private $fulltextSearchMode;
69 $this->resolver = $resolver;
70 $this->replaceSymbols = str_split(self::SPECIAL_CHARACTERS, 1);
71 $this->fulltextHelper = $fulltextHelper;
72 $this->fulltextSearchMode = $fulltextSearchMode;
79 public function build(
82 RequestQueryInterface
$query,
86 $queryValue = $this->
prepareQuery($query->getValue(), $conditionType);
89 foreach (
$query->getMatches() as $match) {
90 $fieldList[] = $match[
'field'];
92 $resolvedFieldList = $this->resolver->resolve($fieldList);
96 foreach ($resolvedFieldList as $field) {
98 $fieldIds[] = $field->getAttributeId();
100 $column = $field->getColumn();
104 $matchQuery = $this->fulltextHelper->getMatchQuery(
107 $this->fulltextSearchMode
112 $matchQuery = sprintf(
'(%s AND search_index.attribute_id IN (%s))', $matchQuery, implode(
',', $fieldIds));
129 $queryValue = str_replace($this->replaceSymbols,
' ', $queryValue);
130 foreach ($this->preprocessors as $preprocessor) {
131 $queryValue = $preprocessor->process($queryValue);
141 $queryValues = explode(
' ', $queryValue);
143 foreach ($queryValues as $queryKey => $queryValue) {
144 if (empty($queryValue)) {
145 unset($queryValues[$queryKey]);
147 $stringSuffix = self::MINIMAL_CHARACTER_LENGTH > strlen($queryValue) ?
'' :
'*';
148 $queryValues[$queryKey] = $stringPrefix . $queryValue . $stringSuffix;
152 $queryValue = implode(
' ', $queryValues);
const MINIMAL_CHARACTER_LENGTH
elseif(isset( $params[ 'redirect_parent']))
prepareQuery($queryValue, $conditionType)
__construct(ResolverInterface $resolver, Fulltext $fulltextHelper, $fulltextSearchMode=Fulltext::FULLTEXT_MODE_BOOLEAN, array $preprocessors=[])
const QUERY_CONDITION_MUST
const FULLTEXT_MODE_BOOLEAN
addCondition($score, $useWeights=true)
const QUERY_CONDITION_NOT
build(ScoreBuilder $scoreBuilder, \Magento\Framework\DB\Select $select, \Magento\Framework\Search\Request\QueryInterface $query, $conditionType)