public function buildQuery(RequestInterface $request)
 {
     // $params = new Object();
     $params = $this->searchHelper->getSearchParams();
     $this->processQuery($request->getQuery(), $params, BoolQuery::QUERY_CONDITION_MUST);
     return $params;
 }
Example #2
0
 /**
  * @param RequestInterface $request
  * @return \Magento\Framework\DB\Ddl\Table
  * @throws \Exception
  */
 public function buildQuery(RequestInterface $request)
 {
     $searchIndex = $this->indexFactory->create()->load($request->getIndex());
     $weights = [];
     foreach ($searchIndex->getIndexInstance()->getAttributeWeights() as $attr => $weight) {
         $weights[$attr] = pow(2, $weight);
     }
     $indexName = $this->scopeResolver->resolve($request->getIndex(), $request->getDimensions());
     $sphinxQuery = $this->engine->getQuery()->select(['id', new QLExpression('weight()')])->from($indexName)->limit(0, 1000000)->option('max_matches', 1000000)->option('field_weights', $weights)->option('ranker', new QLExpression("expr('sum(word_count*user_weight) + bm25')"));
     //@todo http://habrahabr.ru/company/sphinx/blog/133790/
     $queryContainer = $this->queryContainerFactory->create(['request' => $request]);
     $sphinxQuery = $this->processQuery($request->getQuery(), $sphinxQuery, BoolQuery::QUERY_CONDITION_MUST, $queryContainer);
     $sphinxQuery = $this->addDerivedQueries($queryContainer, $sphinxQuery);
     $result = $sphinxQuery->execute();
     if (isset($_GET) && isset($_GET['debug'])) {
         echo $sphinxQuery->getCompiled();
         echo '<pre>' . print_r($result, true) . '</pre>';
     }
     $documents = [];
     foreach ($result as $item) {
         $document = $this->documentFactory->create([]);
         $document->setId($item['id'])->setCustomAttribute('entity_id', $item['id'])->setCustomAttribute('score', new DataObject(['value' => $item['weight()']]));
         $documents[] = $document;
     }
     $table = $this->temporaryStorage->storeApiDocuments($documents);
     return $table;
 }
 /**
  * @param Select $select
  * @param RequestInterface $request
  * @return Select
  */
 public function addTables(Select $select, RequestInterface $request)
 {
     $mappedTables = [];
     $filters = $this->getFilters($request->getQuery());
     foreach ($filters as $filter) {
         list($alias, $table, $mapOn, $mappedFields) = $this->getMappingData($filter);
         if (!array_key_exists($alias, $mappedTables)) {
             $select->joinLeft([$alias => $table], $mapOn, $mappedFields);
             $mappedTables[$alias] = $table;
         }
     }
     return $select;
 }
Example #4
0
 /**
  * @param RequestInterface $request
  * @return bool
  */
 private function isNeedToAddFilters(RequestInterface $request)
 {
     return $this->hasFilters($request->getQuery());
 }
Example #5
0
 /**
  * Build adapter dependent query
  *
  * @param RequestInterface $request
  * @return Select
  */
 public function buildQuery(RequestInterface $request)
 {
     /** @var ScoreBuilder $scoreBuilder */
     $scoreBuilder = $this->scoreBuilderFactory->create();
     $select = $this->processQuery($scoreBuilder, $request->getQuery(), $this->getSelect(), self::BOOL_MUST);
     $select = $this->processDimensions($request, $select);
     $tableName = $this->resource->getTableName($request->getIndex());
     $select->from($tableName)->columns($scoreBuilder->build())->order($scoreBuilder->getScoreAlias() . ' ' . Select::SQL_DESC);
     return $select;
 }