divante-ltd/pimcore-elasticsearch-plugin

此包已被废弃且不再维护。没有建议的替代包。

适用于Pimcore的灵活Elasticsearch插件 - 现在支持DSL!

安装: 802

依赖: 0

建议: 0

安全: 0

星标: 9

关注者: 23

分支: 1

开放问题: 1

类型:pimcore-plugin

1.0.5 2017-10-09 12:09 UTC

This package is auto-updated.

Last update: 2022-02-01 13:07:45 UTC


README

需求

  • PHP 7 或更高版本
  • Pimcore 4
  • Elasticsearch 5
  • Composer

安装

第一步

通过Composer

composer require divante-ltd/pimcore-elasticsearch-plugin

手动

  • 将此存储库下载到您的插件目录。
  • 手动下载依赖项(请参阅composer.json)。
  • 按照此说明的下一步操作。

第二步

在管理面板中打开扩展标签并安装插件。安装完成后,安装完成。

用法

如何使用配置服务?

$container = \Pimcore::getDiContainer();
/** @var \DivanteLtd\PimcoreElasticsearchPlugin\Service\ConfigService $configService */
$configService = $container->get('DivanteLtd\PimcoreElasticsearchPlugin\Service\ConfigService');

$configService->setHosts(["127.0.0.1:9200"]);

$indices = [
    "exampleIndex" => [
        "mappings" => [
            "newsType" => [
                "properties" => [
                    "title" => [
                        "type" => "string",
                        "analyzer" => "standard"
                    ]
                ]
            ]
        ],
        //...
    ]
];
foreach ($indices as $indexName => $body) {
    $configService->addIndex($indexName, $body);
}

INFO:请记住,在调用Elasticsearch服务之前,必须配置配置服务,例如:在插件初始化方法中。

创建索引

php pimcore/cli/console.php divante-ltd:elasticsearch:create-index exampleIndex

它将在Elasticsearch中创建索引。

INFO:它只允许创建已添加到配置服务的索引。

删除索引

php pimcore/cli/console.php divante-ltd:elasticsearch:remove-index exampleIndex

它将删除Elasticsearch中的索引。

索引器


use DivanteLtd\PimcoreElasticsearchPlugin\Indexer\AbstractIndexer;

class ExampleIndexer extends AbstractIndexer
{

    /**
     * @param AbstractElement $element
     *
     * @return bool
     */
    public function isIndexable(AbstractElement $element): bool
    {
        return $element instanceof News;
    }

    /**
     * @param AbstractElement|News $element
     *
     * @return array
     */
    public function buildDocument(AbstractElement $element): array
    {
        return [
            'title' => $element->getTitle(),
        ];
    }

    /**
     * @return string
     */
    public function getIndexName(): string
    {
        return 'exampleIndex';
    }

    /**
     * @return string
     */
    public function getType(): string
    {
        return 'newsType';
    }
}

您还需要注册此索引器,以便它可以与reindex all命令和事件监听器(如object.postAdd等)一起工作。

/** @var \DivanteLtd\PimcoreElasticsearchPlugin\Indexer\Service\IndexerRegisterService $indexerRegister */
$indexerRegister = \Pimcore::getDiContainer()->get(
    'DivanteLtd\PimcoreElasticsearchPlugin\Indexer\Service\IndexerRegisterService'
);
$indexerRegister->add(new ExampleIndexer());

从现在起,每次您添加、编辑或删除News类的实例时,它都将被添加、保存或从Elastic中删除。

如何重新索引所有内容?

php pimcore/cli/console.php divante-ltd:elasticsearch:reindex-all

如果您只想重新索引例如对象

php pimcore/cli/console.php divante-ltd:elasticsearch:reindex-all --objects

如何搜索?

use ONGR\ElasticsearchDSL\Query\Compound\BoolQuery;
use ONGR\ElasticsearchDSL\Query\FullText\MatchQuery;
use ONGR\ElasticsearchDSL\Query\TermLevel\TypeQuery;
use ONGR\ElasticsearchDSL\Search;
use DivanteLtd\PimcoreElasticsearchPlugin\Service\ElasticSearchService;


/** @var ElasticSearchService $elasticSearchService */
$elasticSearchService = \Pimcore::getDiContainer()->get(
    'DivanteLtd\PimcoreElasticsearchPlugin\Service\ElasticSearchService'
);
$boolQuery = new BoolQuery();
$boolQuery->addParameter("minimum_should_match", 1);
$boolQuery->addParameter("boost", 1);
$boolQuery->add(new TypeQuery('newsType'), BoolQuery::MUST);
$boolQuery->add(new MatchQuery('title', $query), BoolQuery::SHOULD);
$search = new Search();
$search
    ->addQuery($boolQuery)
    ->setFrom(0)
    ->setSize(10);
//reults should be array of News objects
$results = $elasticSearchService->find('newsType', $search);

更多示例请参阅此处:http://docs.ongr.io/ElasticsearchDSL

关于作者

Divante-logo

我们是来自欧洲的软件公司,总部位于波兰,拥有约150名员工。我们的核心竞争力围绕在Magento、Pimcore和定制软件项目(我们喜欢Symfony3、Node.js、Angular、React、Vue.js)构建。我们专注于复杂的集成项目,试图将硬核IT与优秀的产品设计和UX相结合。

访问我们的网站Divante.co获取更多信息。