张卡特 / elasticsearch
Laravel包,提供用于操作Elasticsearch的流畅API
1.0.5
2019-02-03 23:15 UTC
Requires
- ext-curl: *
- ext-json: *
- illuminate/support: ~5
- nesbot/carbon: ~1.34
Requires (Dev)
- mockery/mockery: ^1.1
- orchestra/testbench: ~3.0
- phpunit/phpunit: ~7.0
- sempro/phpunit-pretty-print: ^1.0
README
安装
通过Composer
$ composer require carterzhou/elasticsearch
用法
首先,创建此类的一个实例。在这里,我们使用依赖注入让Laravel为我们创建和注入实例。
use CarterZhou\Elasticsearch\Client; class TestController extends Controller { protected $client; /** * TestController constructor. * @param Client $client */ public function __construct(Client $client) { $this->client = $client; } }
- 进行简单搜索
然后我们可以使用search
方法从Elasticsearch中获取数据。注意,我们可以链式调用match
方法来添加过滤条件(类似于Eloquent的where
方法)。
$url = $this->client->getHost() . '/indices-2019.01.28'; $this->client ->match('request', 'one-of-urls') ->match('request', 'field1 field2') ->setSize(500); $this->client->search($url); if ($this->client->hasDocuments()) { foreach ($this->client->getDocuments() as $document) { // Process your document here... } }
- 搜索所有文档。如果匹配的文档总数超过您设置的尺寸,您也可以多次与Elasticsearch通信来获取文档。
$url = $this->client->getHost() . '/indices-2019.01.28'; $this->client ->match('request', 'one-of-urls') ->match('request', 'field1 field2') ->setSize(500); do { $this->client->search($url); if ($this->client->hasDocuments()) { foreach ($this->client->getDocuments() as $redirect) { // Process your document here... } } } while ($this->client->hasMoreDocuments());
注意,这里我们使用了一个do while
循环,因为至少会执行一次搜索。您不需要手动设置"from",因为search
方法会在底层计算并维护包括"from"在内的属性。
警告:如果匹配的文档总数超过10000,则不应使用search
方法,因为默认情况下,结果窗口使用"from"进行查询时为10000。在这种情况下,请改用scroll
方法。
- 使用滚动
如上所述,不要使用search
方法来遍历大型结果集,因为通常不允许这样做。为了满足这种需求,您可以使用如下所示的scroll
方法
$url = $this->client->getHost() . '/logstash*'; $this->client->matchAll()->setSize(500); $this->client->scroll($url); do { foreach ($this->client->getDocuments() as $document) { // Process your document here... } $this->client->scroll($url); } while ($this->client->hasDocuments());
变更日志
请参阅变更日志以获取有关最近更改的更多信息。
贡献
请参阅contributing.md以获取详细信息以及待办事项清单。
安全性
如果您发现任何与安全相关的问题,请通过电子邮件而不是问题跟踪器联系作者。
许可证
许可证。请参阅许可证文件以获取更多信息。