divante-ltd / pimcore-elasticsearch-plugin
此包已被废弃且不再维护。没有建议的替代包。
适用于Pimcore的灵活Elasticsearch插件 - 现在支持DSL!
1.0.5
2017-10-09 12:09 UTC
Requires
- php: >=7
- elasticsearch/elasticsearch: >=5
- ongr/elasticsearch-dsl: >=5
- pimcore/installer-plugin: >=1
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
关于作者
我们是来自欧洲的软件公司,总部位于波兰,拥有约150名员工。我们的核心竞争力围绕在Magento、Pimcore和定制软件项目(我们喜欢Symfony3、Node.js、Angular、React、Vue.js)构建。我们专注于复杂的集成项目,试图将硬核IT与优秀的产品设计和UX相结合。
访问我们的网站Divante.co获取更多信息。