elasticsearch-php工具类的编写

来源:互联网 发布:wifi网络连接不可用 编辑:程序博客网 时间:2024/06/03 14:20

 

es 5.4.0

ik 5.4.0

php 5.6

======================================

自己编写php的elasticsearch的增删改查的类:=》带有ik中文分词的功能

ik的安装文档:http://www.cnblogs.com/meiping/p/7423563.html

 

1、初始化客户端

require 'vendor/autoload.php';use Elasticsearch\ClientBuilder;$client = ClientBuilder::create()->build();

 

 

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

 

原创粉丝点击