1. 程式人生 > >elasticsearch-php工具類的編寫

elasticsearch-php工具類的編寫

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