babenkoivan / elastic-mate
此包已废弃,不再维护。没有建议的替代包。
Elasticsearch 管理工具
v0.1.0
2018-12-15 10:39 UTC
Requires
- php: ^7.1
- elasticsearch/elasticsearch: ^6.0
- illuminate/support: ^5.7
Requires (Dev)
- phpunit/phpunit: ^7.0
This package is auto-updated.
Last update: 2020-01-23 18:22:39 UTC
README
Elastic mate 是一个工具,它简化了文档和索引管理。这只是一个包的早期版本,因此某些功能可能无法按预期工作,或者您可能在文档中找到一些不准确之处。
内容
基本使用
快速链接
安装
使用 composer 安装包
composer require babenkoivan/elastic-mate
配置
您只需配置客户端即可开始使用该包
use BabenkoIvan\ElasticMate\Infrastructure\Client\ClientFactory; use BabenkoIvan\ElasticMate\Core\EntityManagers\IndexManager; use BabenkoIvan\ElasticMate\Core\EntityManagers\BulkDocumentManager; // create Elastic Search client instance $client = ClientFactory::fromConfig([ 'hosts' => [ 'localhost:9200' ] ]); // pass client to managers $indexManager = new IndexManager($client); $documentManager = new BulkDocumentManager($client);
了解更多有关可能的配置选项 这里。
索引操作
创建
在官方文档中了解更多有关索引创建的信息。
use BabenkoIvan\ElasticMate\Infrastructure\Client\ClientFactory; use BabenkoIvan\ElasticMate\Core\EntityManagers\IndexManager; use BabenkoIvan\ElasticMate\Core\Settings\Analysis; use BabenkoIvan\ElasticMate\Core\Settings\Analyzers\StandardAnalyzer; use BabenkoIvan\ElasticMate\Core\Settings\Settings; use BabenkoIvan\ElasticMate\Core\Mapping\Mapping; use BabenkoIvan\ElasticMate\Core\Mapping\Properties\TextProperty; use BabenkoIvan\ElasticMate\Core\Entities\Index; // create Elastic Search client instance $client = ClientFactory::fromConfig([ 'hosts' => [ 'localhost:9200' ] ]); // pass client to an index manager $indexManager = new IndexManager($client); // configure your index $analysis = (new Analysis()) ->addAnalyzer(new StandardAnalyzer('content_analyzer')); $settings = (new Settings()) ->setNumberOfShards(1) ->setAnalysis($analysis); $mapping = (new Mapping()) ->setSourceEnabled(false) ->addProperty((new TextProperty('content'))->setAnalyzer('content_analyzer')); $index = (new Index('my_index')) ->setSettings($settings) ->setMapping($mapping); // create the index $indexManager->create($index);
更新设置
在官方文档中了解更多有关索引设置更新的信息。
use BabenkoIvan\ElasticMate\Infrastructure\Client\ClientFactory; use BabenkoIvan\ElasticMate\Core\EntityManagers\IndexManager; use BabenkoIvan\ElasticMate\Core\Settings\Analysis; use BabenkoIvan\ElasticMate\Core\Settings\Analyzers\StandardAnalyzer; // create Elastic Search client instance $client = ClientFactory::fromConfig([ 'hosts' => [ 'localhost:9200' ] ]); // pass client to an index manager $indexManager = new IndexManager($client); // configure your index settings $analysis = (new Analysis()) ->addAnalyzer(new StandardAnalyzer('content_analyzer')); $index->getSettings() ->setAnalysis($analysis); // update the index settings $indexManager->updateSettings($index); // you can force settings update, that will cause index closing and opening it again after update $indexManager->updateSettings($index, true);
了解更多有关支持的 设置。
更新映射
在官方文档中了解更多有关映射更新的信息。
use BabenkoIvan\ElasticMate\Infrastructure\Client\ClientFactory; use BabenkoIvan\ElasticMate\Core\EntityManagers\IndexManager; use BabenkoIvan\ElasticMate\Core\Mapping\Properties\TextProperty; // create Elastic Search client instance $client = ClientFactory::fromConfig([ 'hosts' => [ 'localhost:9200' ] ]); // pass client to an index manager $indexManager = new IndexManager($client); // configure your index mapping $index->getMapping() ->addProperty(new TextProperty('content')); // update the index mapping $indexManager->updateMapping($index);
了解更多有关支持的 映射属性。
删除
在官方文档中了解更多有关索引删除的信息。
use BabenkoIvan\ElasticMate\Infrastructure\Client\ClientFactory; use BabenkoIvan\ElasticMate\Core\EntityManagers\IndexManager; // create Elastic Search client instance $client = ClientFactory::fromConfig([ 'hosts' => [ 'localhost:9200' ] ]); // pass client to an index manager $indexManager = new IndexManager($client); // delete an index $indexManager->delete($index);
文档操作
索引
在官方文档中了解更多有关文档索引 API 的信息。
use BabenkoIvan\ElasticMate\Infrastructure\Client\ClientFactory; use BabenkoIvan\ElasticMate\Core\EntityManagers\BulkDocumentManager; use BabenkoIvan\ElasticMate\Core\Entities\Document; use BabenkoIvan\ElasticMate\Core\Content\Content; // create Elastic Search client instance $client = ClientFactory::fromConfig([ 'hosts' => [ 'localhost:9200' ] ]); // pass client to a document manager $documentManager = new BulkDocumentManager($client); // define your documents $documents = collect([ new Document('1', new Content(['name' => 'foo'])), new Document('2', new Content(['name' => 'bar'])) ]); // index the documents $documentManager->index($index, $documents); // you can force document indexation, that will cause immidiate index refresh $documentManager->index($index, $documents, true);
删除
在官方文档中了解更多有关文档删除 API 的信息。
use BabenkoIvan\ElasticMate\Infrastructure\Client\ClientFactory; use BabenkoIvan\ElasticMate\Core\EntityManagers\BulkDocumentManager; // create Elastic Search client instance $client = ClientFactory::fromConfig([ 'hosts' => [ 'localhost:9200' ] ]); // pass client to a document manager $documentManager = new BulkDocumentManager($client); // delete the documents $documentManager->delete($index, $documents); // you can force document deletion, that will cause immidiate index refresh $documentManager->delete($index, $documents, true);
搜索
在官方文档中了解更多关于搜索API的信息。
use BabenkoIvan\ElasticMate\Infrastructure\Client\ClientFactory; use BabenkoIvan\ElasticMate\Core\EntityManagers\BulkDocumentManager; use BabenkoIvan\ElasticMate\Core\Search\Queries\MatchAllQuery; use BabenkoIvan\ElasticMate\Core\Search\Sort\Simple\SimpleSort; use BabenkoIvan\ElasticMate\Core\Search\Sort\Simple\FieldSort; use BabenkoIvan\ElasticMate\Core\Search\Pagination; use BabenkoIvan\ElasticMate\Core\Search\Request; // create Elastic Search client instance $client = ClientFactory::fromConfig([ 'hosts' => [ 'localhost:9200' ] ]); // pass client to a document manager $documentManager = new BulkDocumentManager($client); // create a search query $query = new MatchAllQuery(); // define the way your want documents to be sorted $sort = new SimpleSort(collect([ new FieldSort('_id', 'asc') ])); // specify from and size parameters for pagination $pagination = new Pagination(20, 10); // create a search request $request = (new Request($query)) ->setSort($sort) ->setPagination($pagination); // execute the request and receive a search result $response = $documentManager->search($index, $request); // get documents from response $response->getDocuments(); // get number of documents, that satisfy the query $response->getTotal();
阅读更多关于支持的搜索查询。
内容突变器
当你处理文档内容时,通常你操作的是原始类型。如果你想将自定义类型用作属性值,请按照以下示例配置该属性的突变器。
use BabenkoIvan\ElasticMate\Core\Contracts\Content\Mutator; use DateTimeImmutable; use BabenkoIvan\ElasticMate\Core\Mapping\Properties\DateProperty; use BabenkoIvan\ElasticMate\Core\Mapping\Mapping; use BabenkoIvan\ElasticMate\Core\Entities\Document; use BabenkoIvan\ElasticMate\Core\Content\Content; // declare mutator class MyDateTimeMutator implements Mutator { /** * @var string */ private $format; /** * @param string $format */ public function __construct(string $format) { $this->format = $format; } /** * @param DateTimeImmutable $value * @return string */ public function toPrimitive($value) { return $value->format($this->format); } /** * @param string $value * @return DateTimeImmutable */ public function fromPrimitive($value) { return DateTimeImmutable::createFromFormat($this->format, $value); } } // set mutator in your property $dateTimeProperty = (new DateProperty('my_datetime_property')) ->setFormat('yyyy-MM-dd HH:mm:ss') ->setMutator(new MyDateTimeMutator('Y-m-d H:i:s')); $mapping = (new Mapping()) ->addProperty($dateTimeProperty); // create an index // ... // now you can use DateTimeImmutable in document content, whenever you define a new document or retrieve one from search results $document = new Document('1', new Content([ 'my_datetime_property' => new DateTimeImmutable() ]));