PHP操作Elasticsearch
<h2 class="title">一、安装</h2><p>以下es基于6.4</p>
<p>1、在 composer.json 文件中引入 elasticsearch-php:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
</span>"require":<span style="color: rgba(0, 0, 0, 1)">{
</span>"elasticsearch/elasticsearch":"~6.0",
"monolog/monolog": "~1.0"<span style="color: rgba(0, 0, 0, 1)">
}
}</span></pre>
</div>
<p>2、用 composer 安装客户端:</p>
<div class="cnblogs_code">
<pre>curl -s http:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">getcomposer.org/installer | php</span>
php composer.phar <span style="color: rgba(0, 0, 255, 1)">install</span> --no-dev</pre>
</div>
<p><img src="https://img2018.cnblogs.com/i-beta/1084970/202001/1084970-20200111102819749-1861570714.png"></p>
<p> <img src="https://img2018.cnblogs.com/i-beta/1084970/202001/1084970-20200111102924473-1425686068.png"></p>
<h2 class="title">二、快速开始</h2>
<p>1、创建一个test.php文件,内容如下</p>
<div class="cnblogs_code">
<pre><?<span style="color: rgba(0, 0, 0, 1)">php
</span><span style="color: rgba(0, 0, 255, 1)">require</span> 'vendor/autoload.php'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">use</span><span style="color: rgba(0, 0, 0, 1)"> Elasticsearch\ClientBuilder;
</span><span style="color: rgba(128, 0, 128, 1)">$hosts</span> =<span style="color: rgba(0, 0, 0, 1)"> [
</span>'192.168.16.241:9200', <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> IP + Port</span>
'192.168.16.241', <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Just IP</span>
'localhost:9200', <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Domain + Port</span>
'localhost', <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Just Domain</span>
'http://localhost', <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> SSL to localhost</span>
'https://192.168.16.241:9200'<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> SSL to IP + Port</span>
<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$client</span> = ClientBuilder::create()->setHosts(<span style="color: rgba(128, 0, 128, 1)">$hosts</span>)->build(); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Instantiate a new ClientBuilder// Set the hosts</span>
<span style="color: rgba(128, 0, 128, 1)">$params</span> =<span style="color: rgba(0, 0, 0, 1)"> [
</span>'index'=> 'test_data',
'type' => 'users',
'id' => 100027,
'client' => [ 'ignore' => 404<span style="color: rgba(0, 0, 0, 1)"> ]
];
</span><span style="color: rgba(0, 128, 128, 1)">var_dump</span>( <span style="color: rgba(128, 0, 128, 1)">$client</span>->get(<span style="color: rgba(128, 0, 128, 1)">$params</span>));</pre>
</div>
<p>2、浏览器访问test.php,结果如下(前提是你的es已经有数据)</p>
<p><img src="https://img2018.cnblogs.com/i-beta/1084970/202001/1084970-20200111120030517-1390051478.png"></p>
<h2 class="title">三、基本操作</h2>
<p>1、创建索引</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 128, 1)">$params</span> =<span style="color: rgba(0, 0, 0, 1)"> [
</span>'index' => 'test_index'<span style="color: rgba(0, 0, 0, 1)">
];
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Create the index</span>
<span style="color: rgba(0, 128, 128, 1)">print_r</span>(<span style="color: rgba(128, 0, 128, 1)">$client</span>->indices()->create(<span style="color: rgba(128, 0, 128, 1)">$params</span>));</pre>
</div>
<p><img src="https://img2018.cnblogs.com/i-beta/1084970/202001/1084970-20200111183136117-955558624.png"></p>
<p>2、创建索引(指定模板)</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 128, 1)">$params</span> =<span style="color: rgba(0, 0, 0, 1)"> [
</span>'index' => 'test_index',
'body' =><span style="color: rgba(0, 0, 0, 1)"> [
</span>'settings' =><span style="color: rgba(0, 0, 0, 1)"> [
</span>'number_of_shards' => 5,
'number_of_replicas' => 2<span style="color: rgba(0, 0, 0, 1)">
]</span>,
'mappings' =><span style="color: rgba(0, 0, 0, 1)"> [
</span>'test_type' =><span style="color: rgba(0, 0, 0, 1)"> [
</span>'_source' =><span style="color: rgba(0, 0, 0, 1)"> [
</span>'enabled' => <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
]</span>,
'properties' =><span style="color: rgba(0, 0, 0, 1)"> [
</span>'name' =><span style="color: rgba(0, 0, 0, 1)"> [
</span>'type' => 'text',
'analyzer' => 'ik_max_word'<span style="color: rgba(0, 0, 0, 1)">
]</span>,
'age' =><span style="color: rgba(0, 0, 0, 1)"> [
</span>'type' => 'integer'<span style="color: rgba(0, 0, 0, 1)">
]
]
]
]
]
];
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Create the index with mappings and settings now</span>
<span style="color: rgba(0, 128, 128, 1)">print_r</span>(<span style="color: rgba(128, 0, 128, 1)">$client</span>->indices()->create(<span style="color: rgba(128, 0, 128, 1)">$params</span>));</pre>
</div>
<p><img src="https://img2018.cnblogs.com/i-beta/1084970/202001/1084970-20200113165519906-1166712781.png"></p>
<p> </p>
<p> 3、删除索引</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 128, 1)">$params</span> = ['index' => 'test_index'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 128, 128, 1)">print_r</span>(<span style="color: rgba(128, 0, 128, 1)">$client</span>->indices()->delete(<span style="color: rgba(128, 0, 128, 1)">$params</span>));</pre>
</div>
<p><img src="https://img2018.cnblogs.com/i-beta/1084970/202001/1084970-20200113170004709-451735489.png"></p>
<p> </p>
<p>4、更改索引的配置参数:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 128, 1)">$params</span> =<span style="color: rgba(0, 0, 0, 1)"> [
</span>'index' => 'test_index',
'body' =><span style="color: rgba(0, 0, 0, 1)"> [
</span>'settings' =><span style="color: rgba(0, 0, 0, 1)"> [
</span>'number_of_replicas' => 0,
'refresh_interval' => -1<span style="color: rgba(0, 0, 0, 1)">
]
]
];
</span><span style="color: rgba(0, 128, 128, 1)">print_r</span>(<span style="color: rgba(128, 0, 128, 1)">$client</span>->indices()->putSettings(<span style="color: rgba(128, 0, 128, 1)">$params</span>));</pre>
</div>
<p><img src="https://img2018.cnblogs.com/i-beta/1084970/202001/1084970-20200113170339383-1290254452.png"></p>
<p> </p>
<p>5、获取一个或多个索引的当前配置参数</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 128, 1)">$params</span> =<span style="color: rgba(0, 0, 0, 1)"> [
</span>'index' => [ 'test_index', 'test_data'<span style="color: rgba(0, 0, 0, 1)"> ]
];
</span><span style="color: rgba(0, 128, 128, 1)">print_r</span>(<span style="color: rgba(128, 0, 128, 1)">$client</span>->indices()->getSettings(<span style="color: rgba(128, 0, 128, 1)">$params</span>));</pre>
</div>
<p><img src="https://img2018.cnblogs.com/i-beta/1084970/202001/1084970-20200113171513270-1823321141.png"></p>
<p> </p>
<p> 6、更改或增加一个索引的映射</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 128, 1)">$params</span> =<span style="color: rgba(0, 0, 0, 1)"> [
</span>'index' => 'test_index',
'type' => 'test_type',
'body' =><span style="color: rgba(0, 0, 0, 1)"> [
</span>'test_type' =><span style="color: rgba(0, 0, 0, 1)"> [
</span>'_source' =><span style="color: rgba(0, 0, 0, 1)"> [
</span>'enabled' => <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
]</span>,
'properties' =><span style="color: rgba(0, 0, 0, 1)"> [
</span>'name' =><span style="color: rgba(0, 0, 0, 1)"> [
</span>'type' => 'text',
'analyzer' => 'ik_max_word'<span style="color: rgba(0, 0, 0, 1)">
]</span>,
'age' =><span style="color: rgba(0, 0, 0, 1)"> [
</span>'type' => 'integer'<span style="color: rgba(0, 0, 0, 1)">
]</span>,
'createtime' =><span style="color: rgba(0, 0, 0, 1)"> [
</span>'type' => 'date'//加了一个时间<span style="color: rgba(0, 0, 0, 1)">
]
]
]
]
];
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Update the index mapping</span>
<span style="color: rgba(0, 128, 128, 1)">print_r</span>(<span style="color: rgba(128, 0, 128, 1)">$client</span>->indices()->putMapping(<span style="color: rgba(128, 0, 128, 1)">$params</span>));</pre>
</div>
<p><img src="https://img2018.cnblogs.com/i-beta/1084970/202001/1084970-20200113181341153-125884057.png"></p>
<p> </p>
<p> 7、返回索引和类型的映射细节</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 128, 1)">$response</span> = <span style="color: rgba(128, 0, 128, 1)">$client</span>->indices()-><span style="color: rgba(0, 0, 0, 1)">getMapping();
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Get mappings for all types in 'my_index'</span>
<span style="color: rgba(128, 0, 128, 1)">$params</span> = ['index' => 'my_index'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(128, 0, 128, 1)">$response</span> = <span style="color: rgba(128, 0, 128, 1)">$client</span>->indices()->getMapping(<span style="color: rgba(128, 0, 128, 1)">$params</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Get mappings for all types of 'my_type', regardless of index</span>
<span style="color: rgba(128, 0, 128, 1)">$params</span> = ['type' => 'my_type'<span style="color: rgba(0, 0, 0, 1)"> ];
</span><span style="color: rgba(128, 0, 128, 1)">$response</span> = <span style="color: rgba(128, 0, 128, 1)">$client</span>->indices()->getMapping(<span style="color: rgba(128, 0, 128, 1)">$params</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Get mapping 'my_type' in 'my_index'</span>
<span style="color: rgba(128, 0, 128, 1)">$params</span> =<span style="color: rgba(0, 0, 0, 1)"> [
</span>'index' => 'my_index'
'type' => 'my_type'<span style="color: rgba(0, 0, 0, 1)">
];
</span><span style="color: rgba(128, 0, 128, 1)">$response</span> = <span style="color: rgba(128, 0, 128, 1)">$client</span>->indices()->getMapping(<span style="color: rgba(128, 0, 128, 1)">$params</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Get mappings for two indexes</span>
<span style="color: rgba(128, 0, 128, 1)">$params</span> =<span style="color: rgba(0, 0, 0, 1)"> [
</span>'index' => [ 'my_index', 'my_index2'<span style="color: rgba(0, 0, 0, 1)"> ]
];
</span><span style="color: rgba(128, 0, 128, 1)">$response</span> = <span style="color: rgba(128, 0, 128, 1)">$client</span>->indices()->getMapping(<span style="color: rgba(128, 0, 128, 1)">$params</span>);</pre>
</div>
<p> </p>
<p>8、索引一个文档(提供id,则会更新对应id的记录。若没有提供,则会生成一条文档)</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 128, 1)">$params</span> =<span style="color: rgba(0, 0, 0, 1)"> [
</span>'index' => 'test_data',
'type' => 'users',
'id' => '100027',
'body' => [ 'nickname' => 'update222'<span style="color: rgba(0, 0, 0, 1)">]
];
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Document will be indexed to my_index/my_type/my_id</span>
<span style="color: rgba(0, 128, 128, 1)">print_r</span>(<span style="color: rgba(128, 0, 128, 1)">$client</span>->index(<span style="color: rgba(128, 0, 128, 1)">$params</span>));</pre>
</div>
<p> </p>
<p>9、获取文档</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 128, 1)">$params</span> =<span style="color: rgba(0, 0, 0, 1)"> [
</span>'index' => 'test_data',
'type' => 'users',
'id' => '100027'<span style="color: rgba(0, 0, 0, 1)">
];
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Get doc at /my_index/my_type/my_id</span>
<span style="color: rgba(0, 128, 128, 1)">print_r</span>(<span style="color: rgba(128, 0, 128, 1)">$client</span>->get(<span style="color: rgba(128, 0, 128, 1)">$params</span>));</pre>
</div>
<p><img src="https://img2018.cnblogs.com/i-beta/1084970/202001/1084970-20200114111128994-1212052085.png"></p>
<p> </p>
<p>10、更新文档 (doc指定要更新的字段内容)</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 128, 1)">$params</span> =<span style="color: rgba(0, 0, 0, 1)"> [
</span>'index' => 'test_data',
'type' => 'users',
'id' => '100027',
'body' =><span style="color: rgba(0, 0, 0, 1)"> [
</span>'doc' =><span style="color: rgba(0, 0, 0, 1)"> [
</span>'nickname' => 'abc',
'mobile' => '13800138000'<span style="color: rgba(0, 0, 0, 1)">
]
]
];
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Update doc at /my_index/my_type/my_id</span>
<span style="color: rgba(0, 128, 128, 1)">print_r</span>(<span style="color: rgba(128, 0, 128, 1)">$client</span>->update(<span style="color: rgba(128, 0, 128, 1)">$params</span>));</pre>
</div>
<p><img src="https://img2018.cnblogs.com/i-beta/1084970/202001/1084970-20200114112854115-105614548.png"></p>
<p> </p>
<p>11、执行一个脚本进行更新,对某个字段的数据进行拼接或自增</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 128, 1)">$params</span> =<span style="color: rgba(0, 0, 0, 1)"> [
</span>"index" => "test_data",
"type" => "users",
"id" => "100027",
"body" =><span style="color: rgba(0, 0, 0, 1)"> [
</span>"script" => "ctx._source.nickname += 'hahh'"<span style="color: rgba(0, 0, 0, 1)">
]
];
</span><span style="color: rgba(0, 128, 128, 1)">print_r</span>(<span style="color: rgba(128, 0, 128, 1)">$client</span>->update(<span style="color: rgba(128, 0, 128, 1)">$params</span>));</pre>
</div>
<p> </p>
<p> </p>
<p>12、删除文档</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 128, 1)">$params</span> =<span style="color: rgba(0, 0, 0, 1)"> [
</span>'index' => 'test_data',
'type' => 'users',
'id' => '100027'<span style="color: rgba(0, 0, 0, 1)">
];
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Delete doc at /my_index/my_type/my_id</span>
<span style="color: rgba(0, 128, 128, 1)">print_r</span>(<span style="color: rgba(128, 0, 128, 1)">$client</span>->delete(<span style="color: rgba(128, 0, 128, 1)">$params</span>));</pre>
</div>
<p> </p>
<p> </p>
<p>13、搜索内容</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 128, 1)">$json</span> = '<span style="color: rgba(0, 0, 0, 1)">{
"query" : {
"match" : {
"id" : "100073"
}
}
}</span>'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(128, 0, 128, 1)">$params</span> =<span style="color: rgba(0, 0, 0, 1)"> [
</span>'index' => 'test_data',
'type' => 'users',
'body' => <span style="color: rgba(128, 0, 128, 1)">$json</span><span style="color: rgba(0, 0, 0, 1)">
];
</span><span style="color: rgba(0, 128, 128, 1)">print_r</span>(<span style="color: rgba(128, 0, 128, 1)">$client</span>->search(<span style="color: rgba(128, 0, 128, 1)">$params</span><span style="color: rgba(0, 0, 0, 1)">));
<br>
</span><span style="color: rgba(128, 0, 128, 1)">$params</span> =<span style="color: rgba(0, 0, 0, 1)"> [
</span>'index' => 'test_data',
'type' => 'users',
'body' =><span style="color: rgba(0, 0, 0, 1)"> [
</span>'query' =><span style="color: rgba(0, 0, 0, 1)"> [
</span>'bool' =><span style="color: rgba(0, 0, 0, 1)"> [
</span>'should' =><span style="color: rgba(0, 0, 0, 1)"> [
[ </span>'match' => [ 'nickname' =><span style="color: rgba(0, 0, 0, 1)"> [
</span>'query' => 'user440032',
'boost' => 3, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 权重大</span>
<span style="color: rgba(0, 0, 0, 1)"> ]]]
]</span>,<span style="color: rgba(0, 0, 0, 1)">
]</span>,<span style="color: rgba(0, 0, 0, 1)">
]</span>,
'sort' => ['id'=>['order'=>'desc'<span style="color: rgba(0, 0, 0, 1)">]] //排序 分页
</span>, 'from' => 0, 'size' => 10<span style="color: rgba(0, 0, 0, 1)">
]
];
</span><span style="color: rgba(0, 128, 128, 1)">print_r</span>(<span style="color: rgba(128, 0, 128, 1)">$client</span>->search(<span style="color: rgba(128, 0, 128, 1)">$params</span>));</pre>
</div><br><br>
来源:https://www.cnblogs.com/killer21/p/12179936.html
頁:
[1]