34 \
Magento\Search\Model\QueryFactory $queryFactory,
38 $this->_searchQueryModel = $queryFactory->create();
48 $this->
_init(
'catalogsearch_recommendations',
'id');
62 if (count($relatedQueries) > 0) {
67 $connection->quoteInto(
'relation_id NOT IN(?)', $relatedQueries)
73 $connection->quoteInto(
'relation_id = ?', $queryId),
74 $connection->quoteInto(
'query_id NOT IN(?)', $relatedQueries)
78 $whereOr[] =
$connection->quoteInto(
'query_id = ?', $queryId);
79 $whereOr[] =
$connection->quoteInto(
'relation_id = ?', $queryId);
81 $whereCond =
'(' . implode(
') OR (', $whereOr) .
')';
85 $neededRelatedQueries = array_diff($relatedQueries, $existsRelatedQueries);
86 foreach ($neededRelatedQueries as $relationId) {
102 $collection = $this->_searchQueryModel->getResourceCollection();
105 $queryIdCond =
$connection->quoteInto(
'main_table.query_id IN (?)', $queryId);
108 [
'sr' =>
$collection->getTable(
'catalogsearch_recommendations')],
109 '(sr.query_id=main_table.query_id OR sr.relation_id=main_table.query_id) AND ' . $queryIdCond
111 \
Magento\Framework\DB\Select::COLUMNS
115 'main_table.query_id=sr.query_id',
121 if (!empty($limit)) {
142 $this->_searchQueryModel->loadByQueryText(
$query);
144 if (isset(
$params[
'store_id'])) {
145 $this->_searchQueryModel->setStoreId(
$params[
'store_id']);
148 $relatedQueries = [];
149 if (count($relatedQueriesIds)) {
151 $mainTable = $this->_searchQueryModel->getResourceCollection()->getMainTable();
153 [
'main_table' => $mainTable],
154 [
'query_text',
'num_results']
164 return $relatedQueries;
177 $queryId = $this->_searchQueryModel->getId();
178 $relatedQueries = $this->
getRelatedQueries($queryId, $searchRecommendationsCount,
'num_results DESC');
179 if ($searchRecommendationsCount - count($relatedQueries) < 1) {
180 return $relatedQueries;
184 if (strpos(
$query,
' ') !==
false) {
185 $queryWords = array_unique(array_merge($queryWords, explode(
' ',
$query)));
186 foreach ($queryWords as $key => $word) {
187 $queryWords[$key] = trim($word);
188 if (strlen($word) < 3) {
189 unset($queryWords[$key]);
195 foreach ($queryWords as $word) {
196 $likeCondition[] =
$connection->quoteInto(
'query_text LIKE ?', $word .
'%');
198 $likeCondition = implode(
' OR ', $likeCondition);
201 $this->_searchQueryModel->getResource()->getMainTable(),
207 $this->_searchQueryModel->getStoreId()
211 $searchRecommendationsCount + 1
215 if (!is_array($ids)) {
219 $key = array_search($queryId, $ids);
220 if ($key !==
false) {
223 $ids = array_unique(array_merge($relatedQueries, $ids));
224 $ids = array_slice($ids, 0, $searchRecommendationsCount);
saveRelatedQueries($queryId, $relatedQueries=[])
_init($mainTable, $idFieldName)
loadByQuery($query, $searchRecommendationsCount)
getRecommendationsByQuery($query, $params, $searchRecommendationsCount)
getRelatedQueries($queryId, $limit=false, $order=false)
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE]
__construct(\Magento\Framework\Model\ResourceModel\Db\Context $context, \Magento\Search\Model\QueryFactory $queryFactory, $connectionName=null)