📅  最后修改于: 2023-12-03 15:11:51.889000             🧑  作者: Mango
在Magento 2中,弹性搜索(Elasticsearch)是一个强大的搜索引擎,能够提供更加快速、精确的搜索效果。本文将会介绍如何获取弹性搜索数据。
首先,你需要确保你已经安装并启用了Elasticsearch。如果你还没有安装,可以按照以下步骤进行安装。
安装步骤
bin/elasticsearch
启动Elasticsearch更多设置和详细的安装教程请参考官方文档。
要在Magento 2中使用Elasticsearch,你需要安装一个模块。你可以使用Magento的Composer来安装模块。以下是安装步骤。
1. 打开终端并进入Magento 2根目录的命令行
2. 运行命令:composer require magento/module-elasticsearch
3. 运行命令:bin/magento module:enable Magento_Elasticsearch
4. 运行命令:bin/magento setup:upgrade
通过Elasticsearch获取数据十分容易。下面是获取数据的代码示例。
<?php
namespace Your\Module\Model;
use Magento\Framework\Api\SearchCriteriaBuilder;
use Magento\Framework\Api\SortOrder;
use Magento\Framework\App\Config\ScopeConfigInterface;
use Magento\Framework\Search\Adapter\Mysql\TemporaryStorageFactory;
use Magento\Search\Api\SearchInterface;
class Search
{
/** @var SearchInterface */
private $searchInterface;
/** @var TemporaryStorageFactory */
private $temporaryStorageFactory;
/** @var SearchCriteriaBuilder */
private $searchCriteriaBuilder;
/** @var ScopeConfigInterface */
private $scopeConfig;
/**
* Search constructor.
* @param SearchInterface $searchInterface
* @param TemporaryStorageFactory $temporaryStorageFactory
* @param SearchCriteriaBuilder $searchCriteriaBuilder
* @param ScopeConfigInterface $scopeConfig
*/
public function __construct(
SearchInterface $searchInterface,
TemporaryStorageFactory $temporaryStorageFactory,
SearchCriteriaBuilder $searchCriteriaBuilder,
ScopeConfigInterface $scopeConfig
) {
$this->searchInterface = $searchInterface;
$this->temporaryStorageFactory = $temporaryStorageFactory;
$this->searchCriteriaBuilder = $searchCriteriaBuilder;
$this->scopeConfig = $scopeConfig;
}
/**
* @param string $query
* @param int $currentPage
* @param int $pageSize
* @return array|\Magento\Framework\Api\Search\DocumentInterface[]
*/
public function getSearchResults($query, $currentPage, $pageSize)
{
$index = 'your_index';
$searchCriteria = $this->searchCriteriaBuilder
->addFilter('is_active', 1)
->addFilter('store_id', $this->scopeConfig->getValue('store.id'), 'eq')
->setRequestName('quick_search_container')
->setPageSize($pageSize)
->setCurrentPage($currentPage)
->addSortOrder(
SortOrder::createFromFieldList(['relevance' => 'DESC'])
)->create();
$searchResult = $this->searchInterface->search($searchCriteria);
$documents = [];
$storage = $this->temporaryStorageFactory->create();
$storage->storeApiDocuments($searchResult->getDocuments());
foreach ($searchResult->getIds() as $id) {
$documents[] = $storage->getById($id);
}
return $documents;
}
}
以上代码将只返回一个部分的结果集,如果你需要整个结果集,需要按照以上代码获取到对应的桶并从那里读取数据。
以上就是如何获取弹性搜索数据 Magento 2 ,通过以上步骤你就能够在Magento 2中使用Elasticsearch来提供更加快速和精确的搜索功能。