Elasticsearch と Elasticsearch-php のインストールについては、インターネット上に多くのチュートリアルがあるため、ここでは詳しく説明しません。 Elasticsearch、Elasticsearch-php、php のバージョンに注意してください。ここで著者は、Elasticsearch 5.6.8 Windows バージョン、php 5.6、php onethink フレームワーク (以下、ot)、および Elasticsearch-php コンポーザーを次のように使用しています: (PHP Composer ビデオチュートリアル)
{ "require":{ "elasticsearch/elasticsearch" : "~5.0" } }
コースの推奨事項→ :《 Elasticsearch 全文検索の実践》(実践ビデオ)
1. Elasticsearch に接続します:
1 Elasticsearch を有効にすると、http://127.0.0.1:9200/ から基本情報を直接表示できます。
2. コンポーザーベンダーの下のファイルを ThinkPHPLibraryVendorelasticsearch ディレクトリにコピーします。
3. Elasticsearch に接続します。
public $es; /** * 初始化 */ public function _initialize() { Vendor('elasticsearch.autoload'); //host数组可配置多个节点 $params = array( '127.0.0.1:9200' ); $this->es = \Elasticsearch\ClientBuilder::create()->setHosts($params)->build(); }
build() メソッドは ClientBuilder オブジェクトを Client オブジェクトに変換します。
2. Elasticsearch-php の使用:
1. インデックスの作成:
インデックスとタイプに関して、ここで特別な修正があります。インデックスはリレーショナル データベースのデータベースのようなもので、タイプはデータベースのテーブルのようなものです。その理解は間違っています。
/** * 创建索引 */ public function createIndex(){ $params = [ 'index' => 'test', //索引名称 'body' => [ 'settings'=> [ //配置 'number_of_shards'=> 3,//主分片数 'number_of_replicas'=> 1 //主分片的副本数 ], 'mappings'=> [ //映射 '_default_' => [ //默认配置,每个类型缺省的配置使用默认配置 '_all'=>[ // 关闭所有字段的检索 'enabled' => 'false' ], '_source'=>[ // 存储原始文档 'enabled' => 'true' ], 'properties'=> [ //配置数据结构与类型 'name'=> [ //字段1 'type'=>'string',//类型 string、integer、float、double、boolean、date 'index'=> 'analyzed',//索引是否精确值 analyzed not_analyzed ], 'age'=> [ //字段2 'type'=>'integer', ], 'sex'=> [ //字段3 'type'=>'string', 'index'=> 'not_analyzed', ], ] ], 'my_type' => [ 'properties' => [ 'phone'=> [ 'type'=>'string', ], ] ], ], ] ]; $res = $this->es->indices()->create($params); }
Elasticsearch-php API を使用する場合、配列構造は簡単に json に変換できるため、パラメーター $params は通常配列になります。このうち
_default_がデフォルト設定であり、他の設定のデフォルト値も_default_と同じです。
_all を true に設定すると、すべての元のドキュメントが結合されて追加のストレージが作成されます。
_source を true に設定すると、ドキュメントのタイトルまたは URL にインデックスを付けてドキュメントにアクセスする必要がある場合に、一般に false を設定します。 URL 経由でドキュメントのコンテンツを ES に保存する必要があるシナリオ。
最後に、同じインデックス内の異なる型の同じ名前を持つフィールドのデータ型と構成も同じでなければならないことに注意してください!
2. インデックスの削除:/** * 删除索引 */ public function deleteIndex(){ $params = [ 'index' => 'test' ]; $res = $this->es->indices()->delete($params); }
public function getMappings(){ $params = [ 'index' => 'test' ]; $res = $this->es->indices()->getMapping($params); }
public function putMappings(){ $params = [ 'index' => 'test', 'type' => 'my_type', 'body' => [ 'my_type' => [ 'properties' => [ 'idcard' => [ 'type' => 'integer' ] ] ] ] ]; $res = $this->es->indices()->putMapping($params); }
public function postSinDoc(){ $params = [ 'index' => 'test', 'type' => 'my_type', 'body' => [ 'age' => 17, 'name' => 'saki', 'sex' => '女性', 'idcard' => 1112, 'phone' => '1245789', ] ]; $res = $this->es->index($params); }
public function postBulkDoc(){ for($i = 0; $i < 5; $i++) { $params['body'][] = [ 'index' => [ '_index' => 'test', '_type' => 'my_type', ] ]; $params['body'][] = [ 'age' => 17+$i, 'name' => 'reimu'.$i, 'sex' => '女性', 'idcard' => 1112+$i, 'phone' => '1245789'.$i, ]; } $res = $this->es->bulk($params); }
public function getDocById(){ $params = [ 'index' => 'test', 'type' => 'my_type', 'id' => 'AWIDV5l2A907wJBVKu6k' ]; $res = $this->es->get($params); }
public function updateDocById(){ $params = [ 'index' => 'test', 'type' => 'my_type', 'id' => 'AWIDV5l2A907wJBVKu6k', 'body' => [ 'doc' => [ //将doc中的文档与现有文档合并 'name' => 'marisa' ] ] ]; $res = $this->es->update($params); }
public function deleteDocById(){ $params = [ 'index' => 'test', 'type' => 'my_type', 'id' => 'AWIDV5l2A907wJBVKu6k' ]; $res = $this->es->delete($params); }
MySQL と Elasticsearch 間のデータの非対称問題を説明する詳細な例
Elasticsearch とは? Elasticsearch はどこで使用できますか?
Elasticsearch インデックスとドキュメント操作のサンプル チュートリアル
以上がPHP Elasticsearchの基本的な使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。