elasticsearch-php工具類的編寫
阿新 • • 發佈:2019-02-09
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