数据库 - Model 前置说明
官方开源项目 抓取代理IP

使用前说明

Elasticsearch组件从v2.5.26版本起支持,底层基于ES 的 REST API封装调用而成,并不依赖ES官方的SDK包。

目前组件只完成了对单索引表的日常ORM操作支持,对于需要join多表的业务,还是需要执行原生的ES JSON语句,组件提供了exec()方法支持。

同时,由于基于ES 的 REST API封装,所以该组件没有连接池的概念,组件底层基于定时器实现了节点的定时嗅探,分为异常和正常节点的探测;
如正常的节点探测失败,则会转移到异常队列中;反之,异常节点探测成功,则会添加回正常节点的队列中。

关于ES JSON空对象的问题

当我们需要调用组件提供了exec()方法支持原生请求时,由于PHP的数组$arr = [];在转义为JSON字符串时为[],这在ES中是不允许的。

所以使用时需要注意,当提交空数组时,要使用new \stdClass()进行代替,该方法表示创建一个空对象。

例如要转义成下面的JSON格式:

{
    "query" : {
        "match" : {
            "content" : "quick brown fox"
        }
    },
    "highlight" : {
        "fields" : {
            "content" : {}
        }
    }
}

组件就需要这样写:

// 组件
use x\Elasticsearch;
// 动词库
use x\elasticsearch\tool\Client;

// ES组件
$Elasticsearch = new Elasticsearch();

// 执行原生查询
$body = [
    'query' => [
        'match' => [
            'content' => 'quick brown fox'
        ]
    ],
    'highlight' => [
        'fields' => [
            'content' => new \stdClass()
        ]
    ]
];
$res = $Elasticsearch->exec('/shop/_search', Client::GET, $body);
var_dump($res);

SW-X

企业级 - 高性能 PHP 框架

最后更新:2年前 . 作者-小黄牛

本篇目录