Esempio n. 1
0
 /**
  * @param \Mirasvit\Search\Model\Index\AbstractIndex $index
  * @return array
  */
 private function generateQuickSearchRequest($index)
 {
     $request = [];
     $request['dimensions']['scope']['name'] = 'scope';
     $request['dimensions']['scope']['value'] = 'default';
     $request['query'] = $index->getCode();
     $request['index'] = $index->getCode();
     $request['from'] = '0';
     $request['size'] = '100';
     $request['filters'] = [];
     $request['aggregations'] = [];
     $code = $index->getCode();
     $request['queries'][$code]['type'] = 'boolQuery';
     $request['queries'][$code]['name'] = $code;
     $request['queries'][$code]['boost'] = 1;
     $request['queries'][$code]['queryReference'] = [['clause' => 'should', 'ref' => 'search_query']];
     $request['queries']['search_query']['name'] = $index->getCode();
     $request['queries']['search_query']['type'] = 'matchQuery';
     $request['queries']['search_query']['value'] = '$search_term$';
     $request['queries']['search_query']['match'][] = ['field' => '*', 'boost' => 10];
     return $request;
 }
Esempio n. 2
0
 /**
  * Reindex all stores
  *
  * @return bool
  */
 public function reindexAll()
 {
     $configData = ['fieldsets' => [], 'indexer_id' => $this->index->getCode()];
     /** @var \Magento\CatalogSearch\Model\Indexer\IndexerHandler $indexHandler */
     $indexHandler = $this->indexHandlerFactory->create(['data' => $configData]);
     $storeIds = array_keys($this->storeManager->getStores());
     foreach ($storeIds as $storeId) {
         $dimension = new Dimension('scope', $storeId);
         $indexHandler->cleanIndex([$dimension]);
         $indexHandler->saveIndex([$dimension], $this->rebuildStoreIndex($storeId));
     }
     $this->index->getModel()->setStatus(Config::INDEX_STATUS_READY)->save();
     return true;
 }
Esempio n. 3
0
 /**
  * Join matches to collection
  *
  * @param AbstractDb $collection
  * @param string     $field
  *
  * @return $this
  */
 public function joinMatches($collection, $field = 'e.entity_id')
 {
     $requestBuilder = $this->requestBuilderFactory->create();
     $queryText = $this->queryFactory->get()->getQueryText();
     $requestBuilder->bind('search_term', $queryText);
     $requestBuilder->bindDimension('scope', $this->scopeResolver->getScope());
     $requestBuilder->setRequestName($this->index->getCode());
     $queryRequest = $requestBuilder->create();
     $queryResponse = $this->searchEngine->search($queryRequest);
     $temporaryStorage = $this->temporaryStorageFactory->create();
     if ($field == 'ID') {
         //external connection (need improve detection)
         $ids = [0];
         foreach ($queryResponse->getIterator() as $item) {
             $ids[] = $item->getId();
         }
         $collection->getSelect()->where(new \Zend_Db_Expr("{$field} IN (" . implode(',', $ids) . ")"));
     } else {
         $table = $temporaryStorage->storeDocuments($queryResponse->getIterator());
         $collection->getSelect()->joinInner(['search_result' => $table->getName()], $field . ' = search_result.' . TemporaryStorage::FIELD_ENTITY_ID, []);
     }
     return $this;
 }