在此仅对 命令数组进行说明, 执行语句比较简单 就不在 赘述
名次解释: index: 索引名称 类似于关系型数据库 中的 数据库
type: 类型名称 文档表示的对象类别 相当于关系型数据库的 表
id : 文档ID 文档唯一标识 , 添加文档时不指定 会自动生成
1,插入数据(部门员工 信息)
我们向该类型中添加了三条员工信息
$params = [
'index'=>'megacorp',
'type'=>'employee',
'id'=>2,
'body'=>[
"first_name" => "Jane",
"last_name" => "Smith",
"age" => 32,
"about" => "I like to collect rock albums",
"interests" => [ "music" ]
]
];
$response = $client->index($params);
2, 检索文档:
查询 id 编号为2 的员工信息
$params = [
'index'=>'megacorp',
'type'=>'employee',
'id'=>2,
];
$response = $client->get($params);
3,轻量搜索:
$arr = [
'index'=>'meagcorp',
'type'=>'employee',
];
$respone = $client->search($arr);
搜索当前 type 下的文档(默认返回十条结果)
按员工姓氏搜索 姓为 Smith的员工 :
#############
特此提醒 查询字段 类似 match , match_phrase等字段和引号之间一定不要有空格
特此提醒 查询字段 类似 match , match_phrase等字段和引号之间一定不要有空格
特此提醒 查询字段 类似 match , match_phrase等字段和引号之间一定不要有空格
#############
$arr = [
'index'=>'meagcorp',
'type'=>'employee',
'body'=>[
'query'=>[
"match" => [
"last_name" => "smith"
]
]
]
];
$respone = $client->search($arr);
搜索员工姓为Smith 并且年龄 大于30岁的员工:
filter 是过滤器
range 是范围 表示年龄大于 30
must 类似也 and 相当于 年龄大于30 and last_name = Smith
$arr = [
'index'=>'meagcorp',
'type'=>'employee',
'body'=>[
'query'=>[
"bool" => [
"filter" => [
"range" => [
"age" => [ "gt" => 30 ]
]
],
"must" => [
"match" => [
"last_name" => "smith"
]
]
]
]
]
];
$respone = $client->search($arr);
全文检索:搜索所有喜欢攀岩(rock climbing )的员工 :
我们在 about 字段上检索
$arr = [
'index'=>'meagcorp',
'type'=>'employee',
'body'=>[
'query'=>[
"match" => [
"about" => "rock climbing"
]
]
]
];
$respone = $client->search($arr);
检索到两条结果 结果根据 score 的分的大小排名 第一条 正好包含 rock climbing 第二条只包含 rock 字段 所以得分较低
ElasticSearch 默认会按照 相关性得分进行排序, 即每个文档查询的匹配程度
4.短语搜索:
如何只查询只包含单词 rock 和 climbing 并且以 rock climbing 短语形式紧挨着的记录?
为此对 match 查询稍作调整,使用一个叫做 match_phrase 的查询:
$arr = [
'index'=>'meagcorp',
'type'=>'employee',
'body'=>[
"query"=>[
"match_phrase" => [
"about" => "rock climbing"
]
]
]
];
$respone = $client->search($arr);
高亮搜索:
对搜索结果 高亮 部分文本片段 增加 highlight 参数
$arr = [
'index'=>'meagcorp',
'type'=>'employee',
'body'=>[
"query"=>[
"match_phrase" => [
"about" => "rock climbing"
]
],
"highlight"=>[
"fields"=>[
"about"=> new \stdClass() ##此处是PHP 设置空对象##
]
]
]
];
$respone = $client->search($arr);