炒股全靠蒙 發表於 2020-1-11 15:02:00

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>&nbsp;<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>&lt;?<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()-&gt;setHosts(<span style="color: rgba(128, 0, 128, 1)">$hosts</span>)-&gt;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'=&gt; 'test_data',
    'type'   =&gt; 'users',
    'id'   =&gt; 100027,
    'client' =&gt; [ 'ignore' =&gt; 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>-&gt;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' =&gt; '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>-&gt;indices()-&gt;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' =&gt; 'test_index',
    'body' =&gt;<span style="color: rgba(0, 0, 0, 1)"> [
      </span>'settings' =&gt;<span style="color: rgba(0, 0, 0, 1)"> [
            </span>'number_of_shards' =&gt; 5,
            'number_of_replicas' =&gt; 2<span style="color: rgba(0, 0, 0, 1)">
      ]</span>,
      'mappings' =&gt;<span style="color: rgba(0, 0, 0, 1)"> [
            </span>'test_type' =&gt;<span style="color: rgba(0, 0, 0, 1)"> [
                </span>'_source' =&gt;<span style="color: rgba(0, 0, 0, 1)"> [
                  </span>'enabled' =&gt; <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
                ]</span>,
                'properties' =&gt;<span style="color: rgba(0, 0, 0, 1)"> [
                  </span>'name' =&gt;<span style="color: rgba(0, 0, 0, 1)"> [
                        </span>'type' =&gt; 'text',
                        'analyzer' =&gt; 'ik_max_word'<span style="color: rgba(0, 0, 0, 1)">
                  ]</span>,
                  'age' =&gt;<span style="color: rgba(0, 0, 0, 1)"> [
                        </span>'type' =&gt; '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>-&gt;indices()-&gt;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>&nbsp;</p>
<p>&nbsp;3、删除索引</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 128, 1)">$params</span> = ['index' =&gt; '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>-&gt;indices()-&gt;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>&nbsp;</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' =&gt; 'test_index',
    'body' =&gt;<span style="color: rgba(0, 0, 0, 1)"> [
      </span>'settings' =&gt;<span style="color: rgba(0, 0, 0, 1)"> [
            </span>'number_of_replicas' =&gt; 0,
            'refresh_interval' =&gt; -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>-&gt;indices()-&gt;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>&nbsp;</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' =&gt; [ '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>-&gt;indices()-&gt;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>&nbsp;</p>
<p>&nbsp;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' =&gt; 'test_index',
    'type' =&gt; 'test_type',
    'body' =&gt;<span style="color: rgba(0, 0, 0, 1)"> [
      </span>'test_type' =&gt;<span style="color: rgba(0, 0, 0, 1)"> [
            </span>'_source' =&gt;<span style="color: rgba(0, 0, 0, 1)"> [
                </span>'enabled' =&gt; <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
            ]</span>,
            'properties' =&gt;<span style="color: rgba(0, 0, 0, 1)"> [
                </span>'name' =&gt;<span style="color: rgba(0, 0, 0, 1)"> [
                  </span>'type' =&gt; 'text',
                  'analyzer' =&gt; 'ik_max_word'<span style="color: rgba(0, 0, 0, 1)">
                ]</span>,
                'age' =&gt;<span style="color: rgba(0, 0, 0, 1)"> [
                  </span>'type' =&gt; 'integer'<span style="color: rgba(0, 0, 0, 1)">
                ]</span>,
                'createtime' =&gt;<span style="color: rgba(0, 0, 0, 1)"> [
                  </span>'type' =&gt; '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>-&gt;indices()-&gt;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>&nbsp;</p>
<p>&nbsp;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>-&gt;indices()-&gt;<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' =&gt; '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>-&gt;indices()-&gt;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' =&gt; '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>-&gt;indices()-&gt;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' =&gt; 'my_index'
    'type' =&gt; '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>-&gt;indices()-&gt;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' =&gt; [ '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>-&gt;indices()-&gt;getMapping(<span style="color: rgba(128, 0, 128, 1)">$params</span>);</pre>
</div>
<p>&nbsp;</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' =&gt; 'test_data',
    'type' =&gt; 'users',
    'id' =&gt; '100027',
    'body' =&gt; [ 'nickname' =&gt; '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>-&gt;index(<span style="color: rgba(128, 0, 128, 1)">$params</span>));</pre>
</div>
<p>&nbsp;</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' =&gt; 'test_data',
    'type' =&gt; 'users',
    'id' =&gt; '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>-&gt;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>&nbsp;</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' =&gt; 'test_data',
    'type' =&gt; 'users',
    'id' =&gt; '100027',
    'body' =&gt;<span style="color: rgba(0, 0, 0, 1)"> [
      </span>'doc' =&gt;<span style="color: rgba(0, 0, 0, 1)"> [
            </span>'nickname' =&gt; 'abc',
            'mobile' =&gt; '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>-&gt;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>&nbsp;</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" =&gt; "test_data",
    "type" =&gt; "users",
    "id" =&gt; "100027",
    "body" =&gt;<span style="color: rgba(0, 0, 0, 1)"> [
      </span>"script" =&gt; "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>-&gt;update(<span style="color: rgba(128, 0, 128, 1)">$params</span>));</pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;</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' =&gt; 'test_data',
    'type' =&gt; 'users',
    'id' =&gt; '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>-&gt;delete(<span style="color: rgba(128, 0, 128, 1)">$params</span>));</pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;</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' =&gt; 'test_data',
    'type' =&gt; 'users',
    'body' =&gt; <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>-&gt;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' =&gt; 'test_data',
    'type' =&gt; 'users',
    'body' =&gt;<span style="color: rgba(0, 0, 0, 1)"> [
      </span>'query' =&gt;<span style="color: rgba(0, 0, 0, 1)"> [
            </span>'bool' =&gt;<span style="color: rgba(0, 0, 0, 1)"> [
                </span>'should' =&gt;<span style="color: rgba(0, 0, 0, 1)"> [
                  [ </span>'match' =&gt; [ 'nickname' =&gt;<span style="color: rgba(0, 0, 0, 1)"> [
                        </span>'query' =&gt; 'user440032',
                        'boost' =&gt; 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' =&gt; ['id'=&gt;['order'=&gt;'desc'<span style="color: rgba(0, 0, 0, 1)">]]   //排序   分页
      </span>, 'from' =&gt; 0, 'size' =&gt; 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>-&gt;search(<span style="color: rgba(128, 0, 128, 1)">$params</span>));</pre>
</div><br><br>
来源:https://www.cnblogs.com/killer21/p/12179936.html
頁: [1]
查看完整版本: PHP操作Elasticsearch