📜  获取弹性搜索数据 magento 2 - PHP (1)

📅  最后修改于: 2023-12-03 15:11:51.889000             🧑  作者: Mango

获取弹性搜索数据 Magento 2 - PHP

在Magento 2中,弹性搜索(Elasticsearch)是一个强大的搜索引擎,能够提供更加快速、精确的搜索效果。本文将会介绍如何获取弹性搜索数据。

步骤1:设置Elasticsearch

首先,你需要确保你已经安装并启用了Elasticsearch。如果你还没有安装,可以按照以下步骤进行安装。

安装步骤

  1. 下载Elasticsearch
  2. 解压缩文件
  3. 运行 bin/elasticsearch 启动Elasticsearch

更多设置和详细的安装教程请参考官方文档。

步骤2: 安装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
步骤3:使用Elasticsearch获取数据

通过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来提供更加快速和精确的搜索功能。