es搜索 php,php elasticsearch 搜索详解

本章主要讲解php Elasticsearch的搜索的写法,大体上php Elasticsearch的写法还是跟elasticsearch查询语法保持一致,区别就是elasticsearch使用的是json结构,需要转换成php数组。

如果不熟悉elasticsearch查询语法和相关概念,可以先看看elasticsearch查询语法教程,这里不再重复。

下面通过一些例子对比下,elasticsearch查询语法和php的写法之间的区别

php es查询语法差异

es查询语法

curl -XGET 'localhost:9200/my_index/_search' -d '{

"query" : {

"match" : {

"testField" : "abc"

}

}

}'

转换成php后的写法

$params = [

'index' => 'my_index', // 索引名

//body保存es 请求体内容, 这里的内容跟es查询语法保持一致,区别就是需要转成php数组格式

'body' => [

// 这里的内容跟上面查询语法一致

'query' => [

'match' => [

'testField' => 'abc'

]

]

]

];

// 通过search执行查询请求。

$results = $client->search($params);

提示:php elasticsearch的查询语法跟elasticsearch查询语法完全一致,只要将json格式转换成php数组即可, 详情参考:elasticsearch查询语法。

处理搜索结果

$params = [

'index' => 'my_index',

'body' => [

'query' => [

'match' => [

'testField' => 'abc'

]

]

]

];

$results = $client->search($params);

// 下面处理查询结果

$milliseconds = $results['took']; // 获取请求执行时间,单位毫秒

// 获取匹配的最大分值

$maxScore = $results['hits']['max_score'];

// 获取匹配的文档结果,是一个文档列表,建议打印出来看看

$list = $results['hits']['hits'];

复杂的查询例子

es查询例子

curl -XGET 'localhost:9200/my_index/_search' -d '{

"query" : {

"bool" : {

"filter" : {

"term" : { "my_field" : "abc" }

},

"should" : {

"match" : { "my_other_field" : "xyz" }

}

}

}

}'

转换成php代码

$params = [

'index' => 'my_index', // 索引名

'body' => [ // es 请求体,下面的内容,仔细跟上面对比下,完全一致

'query' => [

'bool' => [

'filter' => [

'term' => [ 'my_field' => 'abc' ]

],

'should' => [

'match' => [ 'my_other_field' => 'xyz' ]

]

]

]

]

];

$results = $client->search($params);

分页

$params = [

'index' => 'my_index', // 索引名

'from' => 0, // 分页参数, 开始偏移配置

'size' => 100, // 分页参数 - 分页大小,默认 10

'body' => [// es查询条件

'query' => [

'match' => [

'testField' => 'abc'

]

]

]

];

// 通过search执行查询请求。

$results = $client->search($params);

排序

$params = [

'index' => 'my_index', // 索引名

'from' => 0, // 分页参数, 开始偏移配置

'size' => 100, // 分页参数 - 分页大小,默认 10

'sort' => [ // 设置排序条件, 支持多个排序字段

'shop_id' => [ // 排序字段

'order' => 'desc' // 排序方向: asc升序,desc降序

]

],

'body' => [// es查询条件

'query' => [

'match' => [

'testField' => 'abc'

]

]

]

];

// 通过search执行查询请求。

$results = $client->search($params);