ホームページ  >  記事  >  バックエンド開発  >  PHP Elasticsearchの基本的な使い方

PHP Elasticsearchの基本的な使い方

小云云
小云云オリジナル
2018-05-18 10:21:2136614ブラウズ

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);
     }

3. マッピングの表示:

    public function getMappings(){
        $params = [
            'index' => 'test'
        ];

        $res = $this->es->indices()->getMapping($params);
    }

4. マッピングの変更:

    public function putMappings(){
        $params = [           
            'index' => 'test',
            'type' => 'my_type',
            'body' => [
                'my_type' => [
                    'properties' => [
                        'idcard' => [
                            'type' => 'integer'
                        ]
                    ]
                ]
            ]
        ]; 

        $res = $this->es->indices()->putMapping($params);      
    }

注: マッピングを変更するための API は追加のみ可能で、既存の属性を変更することはできません。

5. 単一のドキュメントを挿入します:

    public function postSinDoc(){
        $params = [
            'index' => 'test',
            'type' => 'my_type',
            'body' => [ 
                'age' => 17,
                'name' => 'saki',
                'sex' => '女性',
                'idcard' => 1112,
                'phone' => '1245789',
            ]
        ];

        $res = $this->es->index($params);
    }

6. 複数のドキュメントを挿入します:

    public function postBulkDoc(){
        for($i = 0; $i < 5; $i++) {
            $params[&#39;body&#39;][] = [
                &#39;index&#39; => [
                    &#39;_index&#39; => &#39;test&#39;,
                    &#39;_type&#39; => &#39;my_type&#39;,
                ]
            ];

            $params[&#39;body&#39;][] = [
                &#39;age&#39; => 17+$i,
                &#39;name&#39; => &#39;reimu&#39;.$i,
                &#39;sex&#39; => &#39;女性&#39;,
                &#39;idcard&#39; => 1112+$i,
                &#39;phone&#39; => &#39;1245789&#39;.$i,
            ];
        }

        $res = $this->es->bulk($params);
    }

8. ID でドキュメントを更新します:

    public function getDocById(){
        $params = [
            &#39;index&#39; => &#39;test&#39;,
            &#39;type&#39; => &#39;my_type&#39;,
            &#39;id&#39; => &#39;AWIDV5l2A907wJBVKu6k&#39;
        ];

        $res = $this->es->get($params);
    }

9. :

    public function updateDocById(){
        $params = [
            &#39;index&#39; => &#39;test&#39;,
            &#39;type&#39; => &#39;my_type&#39;,
            &#39;id&#39; => &#39;AWIDV5l2A907wJBVKu6k&#39;,
            &#39;body&#39; => [
                &#39;doc&#39; => [ //将doc中的文档与现有文档合并
                    &#39;name&#39; => &#39;marisa&#39;
                ]
            ]
        ];

        $res = $this->es->update($params);
    }

注: ID を使用した上記の 3 つの操作では、ID が見つからない場合、Elasticsearch-php は直接エラーを報告します。

10. ドキュメントの検索:

    public function deleteDocById(){
        $params = [
            &#39;index&#39; => &#39;test&#39;,
            &#39;type&#39; => &#39;my_type&#39;,
            &#39;id&#39; => &#39;AWIDV5l2A907wJBVKu6k&#39;
        ];

        $res = $this->es->delete($params);
    }

これは検索の一例です。

関連する推奨事項:

MySQL と Elasticsearch 間のデータの非対称問題を説明する詳細な例

Elasticsearch とは? Elasticsearch はどこで使用できますか?

Elasticsearch インデックスとドキュメント操作のサンプル チュートリアル

以上がPHP Elasticsearchの基本的な使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。