比方說,你的項目中須要一個php版的elasticsearch框架。爲了將它添加到你的項目中(下載),你所須要作的就是建立一個 composer.json 文件,其中描述了項目的依賴關係。注意文件要放在你執行composer命令的目錄中php
{ "require":{ "elasticsearch/elasticsearch":"~2.0" } }
二、cmd切換到要下載elasticsearch框架的目錄,而後執行命令:composer installmysql
若有出錯誤信息:sql
[Composer\Downloader\TransportException]編程
Content-Length mismatch, received 583439 bytes out of the expected 1215108json
解決辦法:切換國內鏡像地址,再執行操做api
一、經過命令切換以下:(最終修改的是composer.json)app
composer config -g repo.packagist composer https://packagist.phpcomposer.comcomposer
二、直接修改 composer.json (其實跟方法1是同樣的。)框架
{ "require":{ "elasticsearch/elasticsearch":"~2.0" }, "repositories": { "packagist": { "type": "composer", "url": "https://packagist.phpcomposer.com" } } }
PHP使用elasticsearch教程:
想直接經過文件查看其餘方法能夠打開如下文件查看(基本使用的方法都在裏面):elasticsearch
一、\elasticsearch\src\Elasticsearch\Client.php中的方法
二、\elasticsearch\Namespaces\IndicesNamespace.php中的方法
ThinkPHP中的模型(已測試過):
<?php /** * Elasticsearch檢索引擎模型 */ namespace app\index\model; use Elasticsearch\ClientBuilder; class Elasticsearch { //配置 private $config = [ 'hosts' => ['http://127.0.0.1:9200'] ]; private $api; public function __construct() { #include(APP_PATH .'/vendor/autoload.php'); #require_once EXTEND_PATH . 'org/elasticsearch/autoload.php'; import('org.elasticsearch.autoload', EXTEND_PATH); $this->api = ClientBuilder::create()->setHosts($this->config['hosts'])->build(); } /************************************************************* /** * 索引一個文檔 * 說明:索引沒有被建立時會自動建立索引 */ public function addOne() { $params = []; $params['index'] = 'xiaochuan'; $params['type'] = 'cat'; $params['id'] = '20180407001'; # 不指定就是es自動分配 $params['body'] = array('name' => '小川編程'); return $this->api->index($params); } /** * 索引多個文檔 * 說明:索引沒有被建立時會自動建立索引 */ public function addAll() { $params = []; for($i = 1; $i < 21; $i++) { $params['body'][] = [ 'index' => [ '_index' => 'test_index'.$i, '_type' => 'cat_test', '_id' => $i, ] ]; $params['body'][] = [ 'name' => '小川編程'.$i, 'content' => '內容'.$i ]; } return $this->api->bulk($params); } /** * 獲取一個文檔 */ public function getOne() { $params = []; $params['index'] = 'xiaochuan'; $params['type'] = 'cat'; $params['id'] = '20180407001'; return $this->api->get($params); } /** * 搜索文檔 */ public function search() { $params = []; $params['index'] = 'xiaochuan'; $params['type'] = 'cat'; $params['body']['query']['match']['name'] = '小川編程'; return $this->api->search($params); } /** * 刪除文檔 * 說明:文檔刪除後,不會刪除對應索引。 */ public function delete() { $params = []; $params['index'] = 'xiaochuan'; $params['type'] = 'cat'; $params['id'] = '20180407001'; return $this->api->delete($params); } /************************************************************* /** * 建立索引 */ public function createIndex() { $params = []; $params['index'] = 'xiaochuan'; return $this->api->indices()->create($params); } /** * 刪除索引:匹配單個 | 匹配多個 * 說明: 索引刪除後,索引下的全部文檔也會被刪除 */ public function deleteIndex() { $params = []; $params['index'] = 'test_index'; # 刪除test_index單個索引 #$params['index'] = 'test_index*'; # 刪除以test_index開始的全部索引 return $this->api->indices()->delete($params); } /************************************************************* /** * 設置索引配置 */ public function setIndexConfig() { $params = []; $params['index'] = 'xiaochuan'; $params['body']['index']['number_of_replicas'] = 0; $params['body']['index']['refresh_interval'] = -1; return $this->api->indices()->putSettings($params); } /** * 獲取索引配置 */ public function getIndexConfig() { # 單個獲取條件寫法 $params['index'] = 'xiaochuan'; # 多個獲取條件寫法 //$params['index'] = ['xiaochuan', 'test_index']; return $this->api->indices()->getSettings($params); } /** * 設置索引映射 */ public function setIndexMapping() { # 設置索引和類型 $params['index'] = 'xiaochuan'; $params['type'] = 'cat'; # 向現有索引添加新類型 $myTypeMapping = array( '_source' => array( 'enabled' => true ), 'properties' => array( 'first_name' => array( 'type' => 'string', 'analyzer' => 'standard' ), 'age' => array( 'type' => 'integer' ) ) ); $params['body']['cat'] = $myTypeMapping; # 更新索引映射 $this->api->indices()->putMapping($params); } /** * 獲取索引映射 */ public function getIndexMapping() { # 獲取全部索引和類型的映射 $ret = $this->api->indices()->getMapping(); /* # 獲取索引爲:xiaochuan的映射 $params['index'] = 'xiaochuan'; $ret = $this->api->indices()->getMapping($params); # 獲取類型爲:cat的映射 $params['type'] = 'cat'; $ret = $this->api->indices()->getMapping($params); # 獲取(索引爲:xiaochuan和 類型爲:cat)的映射 $params['index'] = 'xiaochuan'; $params['type'] = 'cat' $ret = $this->api->indices()->getMapping($params); # 獲取索引爲:xiaochuan和test_index的映射 $params['index'] = ['xiaochuan', 'test_index']; $ret = $this->api->indices()->getMapping($params); */ return $ret; } }
其餘形式用法測試:
test.php
<?php require_once('vendor/autoload.php'); use Elasticsearch\ClientBuilder; function get_conn(){ $host = 'localhost'; $dbname = 'mraz'; $user = 'root'; $passwd = '111111'; $conn = new PDO("mysql:dbname=$dbname;host=$host",$user,$passwd); return $conn; } function create_index(){ //Elastic search php client $client = Elasticsearch\ClientBuilder::create()->build(); $sql = "SELECT * FROM emp"; $conn = get_conn(); $stmt = $conn->query($sql); $rtn = $stmt->fetchAll(); //delete index which already created $params = array(); $params['index'] = 'emp_index'; $client->indices()->delete($params); //create index on log_date,src_ip,dest_ip $rtnCount = count($rtn); for($i=0;$i<$rtnCount;$i++){ $params = array(); $params['body'] = array( 'id' => $rtn[$i]['id'], 'fdName' => $rtn[$i]['fdName'], 'fdAge' => $rtn[$i]['fdAge'], 'fdStatus' => $rtn[$i]['fdStatus'] ); $params['index'] = 'emp_index'; $params['type'] = 'emp_type'; //Document will be indexed to log_index/log_type/autogenerate_id $client->index($params); } echo 'create index done!'; } function search(){ //Elastic search php client $client = Elasticsearch\ClientBuilder::create()->build(); $params = array(); $params['index'] = 'emp_index'; $params['type'] = 'emp_type'; $params['body']['query']['match']['fdStatus'] = '1'; $params['body']['sort'] = array('fdAge'=>array('order'=>'desc')); $params['size'] = 3; $params['from'] = 1; $rtn = $client->search($params); var_dump($rtn); } set_time_limit(0); // create_index(); search(); ?>
1)建立:
include('./vendor/autoload.php'); $elastic = new Elasticsearch\Client(); $index['index'] = 'log'; //索引名稱 $index['type'] = 'ems_run_log'; //類型名稱 $data['body']['settings']['number_of_shards'] = 5; //主分片數量 $data['body']['settings']['number_of_replicas'] = 0; //從分片數量 $elastic->indices()->create($index);
2)插入索引數據:
include('./vendor/autoload.php'); $elastic = new Elasticsearch\Client(); $index['index'] = 'log'; //索引名稱 $index['type'] = 'ems_run_log'; //類型名稱 $index['id'] = 1 //不指定id,系統會自動生成惟一id $index['body'] = array( 'mac' => 'fcd5d900beca', 'customer_id' => 3, 'product_id' => 5, 'version' => 2 ); $elastic->index($index);
3)查詢:
include('./vendor/autoload.php'); $elastic = new Elasticsearch\Client(); $index['index'] = 'log'; //索引名稱 $index['type'] = 'ems_run_log'; //類型名稱 $index['body']['query']['match']['mac'] = 'fcd5d900beca'; $index['size'] = 10; $index['from'] = 200; $elastic->search($index); #至關於sql語句:select*from ems_run_log where mac='fcd5d900beca' limit 200,10;
include('./vendor/autoload.php'); $elastic = new Elasticsearch\Client(); $index['index'] = 'log'; //索引名稱 $index['type'] = 'ems_run_log'; //類型名稱 $index['body']['query']['bool']['must'] = array( array('match' => array('mac' => 'fcd5d900beca')), array('match' => array('product_id' => 20)) ); $index['size'] = 10; $index['from'] = 200; $elastic->search($index); #至關於sql語句:select*from ems_run_log where mac='fcd5d900beca' and product_id=20 limit 200,10;
include('./vendor/autoload.php'); $elastic = new Elasticsearch\Client(); $index['index'] = 'log'; //索引名稱 $index['type'] = 'ems_run_log'; //類型名稱 $index['body']['query']['bool']['should'] = array( array('match' => array('mac' => 'fcd5d900beca')), array('match' => array('product_id' => 20)) ); $index['size'] = 10; $index['from'] = 200; $elastic->search($index); #當於sql語句:select*from ems_run_log where mac='fcd5d900beca' or product_id=20 limit 200,10;
include('./vendor/autoload.php'); $elastic = new Elasticsearch\Client(); $index['index'] = 'log'; //索引名稱 $index['type'] = 'ems_run_log'; //類型名稱 $index['body']['query']['bool']['must_not'] = array( array('match' => array('mac' => 'fcd5d900beca')), array('match' => array('product_id' => 20)) ); $index['size'] = 10; $index['from'] = 200; $elastic->search($index); #至關於sql語句:select*from ems_run_log where mac!='fcd5d900beca' and product_id!=20 limit 200,10;
include('./vendor/autoload.php'); $elastic = new Elasticsearch\Client(); $index['index'] = 'log'; //索引名稱 $index['type'] = 'ems_run_log'; //類型名稱 $index['body']['query']['range'] = array( 'id' => array('gte' => 20,'lt' => 30); ); $index['size'] = 10; $index['from'] = 200; $elastic->search($index); #至關於sql語句:select*from ems_run_log where id>=20 and id<30 limit 200,10;
4)刪除文檔:
include('./vendor/autoload.php'); $elastic = new Elasticsearch\Client(); $index['index'] = 'test'; //索引名稱 $index['type'] = 'ems_test'; //類型名稱 $index['id'] = 2; $elastic->delete($index);
include('./vendor/autoload.php'); $elastic = new Elasticsearch\Client(); $index['index'] = 'log'; //索引名稱 $index['type'] = 'ems_run_log'; //類型名稱 $index['body']['query']['bool']['must_not'] = array( array('match' => array('mac' => 'fcd5d900beca')), array('match' => array('product_id' => 20)) ); $index['size'] = 10; $index['from'] = 200; $elastic->search($index); #至關於sql語句:select*from ems_run_log where mac!='fcd5d900beca' and product_id!=20 limit 200,10;
include('./vendor/autoload.php'); $elastic = new Elasticsearch\Client(); $index['index'] = 'log'; //索引名稱 $index['type'] = 'ems_run_log'; //類型名稱 $index['body']['query']['range'] = array( 'id' => array('gte' => 20,'lt' => 30); ); $index['size'] = 10; $index['from'] = 200; $elastic->search($index); #至關於sql語句:select*from ems_run_log where id>=20 and id<30 limit 200,10;
4)刪除文檔:
include('./vendor/autoload.php'); $elastic = new Elasticsearch\Client(); $index['index'] = 'test'; //索引名稱 $index['type'] = 'ems_test'; //類型名稱 $index['id'] = 2; $elastic->delete($index);