示例#1
0
 /**
  * {@inheritdoc}
  */
 public function build(ScoreBuilder $scoreBuilder, Select $select, RequestQueryInterface $query, $conditionType)
 {
     /** @var $query \Magento\Framework\Search\Request\Query\Match */
     $queryValue = $this->prepareQuery($query->getValue(), $conditionType);
     $fieldList = [];
     foreach ($query->getMatches() as $match) {
         $fieldList[] = $match['field'];
     }
     $resolvedFieldList = $this->resolver->resolve($fieldList);
     $fieldIds = [];
     $columns = [];
     foreach ($resolvedFieldList as $field) {
         if ($field->getType() === FieldInterface::TYPE_FULLTEXT && $field->getAttributeId()) {
             $fieldIds[] = $field->getAttributeId();
         }
         $column = $field->getColumn();
         $columns[$column] = $column;
     }
     $matchQuery = $this->fulltextHelper->getMatchQuery($columns, $queryValue, $this->fulltextSearchMode);
     $scoreBuilder->addCondition($matchQuery, true);
     if ($fieldIds) {
         $matchQuery = sprintf('(%s AND search_index.attribute_id IN (%s))', $matchQuery, implode(',', $fieldIds));
     }
     $select->where($matchQuery);
     return $select;
 }
示例#2
0
 /**
  * Custom load model: Get data by user query phrase and store view id
  *
  * @param SynReaderModel $object
  * @param string $value
  * @return $this
  */
 public function loadByPhrase(SynReaderModel $object, $value)
 {
     $phrase = strtolower($value);
     $matchQuery = $this->fullTextSelect->getMatchQuery(['synonyms' => 'synonyms'], $phrase, Fulltext::FULLTEXT_MODE_BOOLEAN);
     $query = $this->getConnection()->select()->from($this->getMainTable())->where('store_id = ?', $object->getStoreViewId())->where($matchQuery);
     $rows = $this->getConnection()->fetchAll($query);
     $object->setData($rows);
     $this->_afterLoad($object);
     return $this;
 }
示例#3
0
 /**
  * {@inheritdoc}
  */
 public function build(ScoreBuilder $scoreBuilder, Select $select, RequestQueryInterface $query, $conditionType)
 {
     /** @var $query \Magento\Framework\Search\Request\Query\Match */
     $queryValue = $this->prepareQuery($query->getValue(), $conditionType);
     $fieldList = [];
     foreach ($query->getMatches() as $match) {
         $fieldList[] = $match['field'];
     }
     $resolvedFieldList = $this->resolver->resolve($fieldList);
     $queryBoost = $query->getBoost();
     $scoreBuilder->addCondition($this->fulltextHelper->getMatchQuery($resolvedFieldList, $queryValue, Fulltext::FULLTEXT_MODE_BOOLEAN), $queryBoost !== null ? $queryBoost : 1);
     $select = $this->fulltextHelper->match($select, $resolvedFieldList, $queryValue, true, Fulltext::FULLTEXT_MODE_BOOLEAN);
     return $select;
 }
 /**
  * A helper function to query by phrase and get results
  *
  * @param string $phrase
  * @return array
  */
 private function queryByPhrase($phrase)
 {
     $matchQuery = $this->fullTextSelect->getMatchQuery(['synonyms' => 'synonyms'], $phrase, Fulltext::FULLTEXT_MODE_BOOLEAN);
     $query = $this->getConnection()->select()->from($this->getMainTable())->where($matchQuery);
     return $this->getConnection()->fetchAll($query);
 }