es 5.4.0
ik 5.4.0
php 5.6
======================================
自己编写php的elasticsearch的增删改查的类:=》带有ik中文分词的功能
ik的安装文档:http://www.cnblogs.com/meiping/p/7423563.html
1、初始化客户端
2、创建索引
$indexParams = [
'index' => $dbName, ## 索引:数据库
];
$client->indices()->create($indexParams);
3、设置全文检索的配置 mapping
// 准备好需要配置的字段和字段类型,用来配置mapping
$data = [
'title'=>'string', ## 字段title,字段类型string
'content'=>'text' ## 字段content,字段类型text
]
$indexParam =[
'index' => $dbName, ## 索引:数据库
'type' => $tbName, ## 类型:数据表
];
$mapParam = [];
foreach ($data as $field=>$field_type){
$mapParam[$field] = [
'type' => $field_type,
'analyzer' => 'ik_max_word',
'search_analyzer' => 'ik_max_word'
];
}
$indexParam['body'][$indexParam['type']]['properties'] = $mapParam;
$client->indices()->putMapping($indexParam);
4、添加数据
// 准备好添加的数据:
$data = [
'id'=>'1',
'title'=>'我是标题', ## 字段title,字段值
'content'=>'我是内容' ## 字段content,字段值
]
$params = [
'index' => $dbName, ## 索引:数据库
'type' => $tbName, ## 类型:数据表
];
if(array_key_exists('id', $data)){ ## 我把数据里的id取出来,做es的数据的唯一标识了,我觉得保持一致方便删除数据。
$params['id'] = $data['id'];
}
$params['body'] = $data;
$r = $client->index($params);
5、搜索数据:单个字段的根据关键词查询
// 准备好需要查询的条件
$data = [
'content'=>'中国'
];
$param = [
'index' => $dbName, ## 索引:数据库
'type' => $tbName, ## 类型:数据表
];
$query = [
'match'=>[
$field=>[
'query'=>$data[$field],
'minimum_should_match'=>'90%'
]
]
];
// 高亮
$highlight = [
'fields'=> [
$field=>[
'pre_tags'=>'<strong>',
'post_tags'=>'</strong>'
]
]
];
$params['body']['query'] = $query;
$params['body']['highlight'] = $highlight;
$r = $client->search($params);
6、多个词满足查询条件
// 准备好需要查询的条件
$data = [
'title,content'=>'中国' ## 自己设置的,多个关键词用了“,”隔开,查询关键词是“中国”
];
$params = [
'index' => $dbName, ## 索引:数据库
'type' => $tbName, ## 类型:数据表
];
$field = key($data);
$field_arr = explode(",", $field);
$query = [
'multi_match'=>[
'query' => $data[$field],
'type' => "best_fields", ## 我们希望完全匹配的文档占的评分比较高,则需要使用best_fields
'fields' => $field_arr,
'tie_breaker' => 0.3 ## 意思就是完全匹配"中国"的文档评分会比较靠前,如果只匹配中国的文档评分乘以0.3的系数,这方面的详细解答,请阅读:http://www.cnblogs.com/yjf512/p/4897294.html
]
];
// 高亮
$highlight = [];
foreach ($field_arr as $field){
$highlight['fields'][$field] = [
'pre_tags'=>'<strong>',
'post_tags'=>'</strong>'
];
}
$params['body']['query'] = $query;
$params['body']['highlight'] = $highlight;
$client->search($params);
7、根据唯一标识id删除数据
$params = [
'index' => $dbName, ## 索引:数据库
'type' => $tbName, ## 类型:数据表
];
$params['id'] = $id;
$r = $client->delete($params);
====================================
es-php官网:
https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/_quickstart.html