/** * @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()); }
/** * 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; }