本章主要讲解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);