예제 #1
0
 /**
  * @covers              Mirasvit\SearchMysql\Model\Adapter::query
  * @dataProvider        randomQueryProvider
  *
  * @magentoDataFixture  Mirasvit/SearchMysql/_files/Model/indexes.php
  * @magentoAppIsolation enabled
  *
  * @param string $query
  */
 public function testQuery($query)
 {
     // Product
     $queryRequest = $this->requestBuilderFactory->create()->bind('search_term', $query)->setRequestName('catalogsearch_fulltext')->bindDimension('scope', 1)->create();
     $response = $this->adapter->query($queryRequest);
     $this->assertGreaterThanOrEqual(0, $response->count());
     // Catalog category
     $queryRequest = $this->requestBuilderFactory->create()->bind('search_term', $query)->setRequestName('magento_catalog_category')->bindDimension('scope', 1)->create();
     $response = $this->adapter->query($queryRequest);
     $this->assertGreaterThanOrEqual(0, $response->count());
     // Cms page
     $queryRequest = $this->requestBuilderFactory->create()->bind('search_term', $query)->setRequestName('magento_cms_page')->bindDimension('scope', 1)->create();
     $response = $this->adapter->query($queryRequest);
     $this->assertGreaterThanOrEqual(0, $response->count());
 }
예제 #2
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;
 }