Elasticsearch-PHP API の概要

不言
不言オリジナル
2018-04-13 09:13:172498ブラウズ

この記事の内容は Elasticsearch-PHP API の紹介です。必要な方は参考にしてください。Elasticsearch は現在人気のあるビッグデータ処理フレームワークの 1 つです。詳しい手順はBaiduなどでご自身で行ってください。

以下の記事ではElasticsearchを表すためにesの略語を使用しています
esには公式のphp APIインターフェースがあり、githubまたはcomposerからダウンロードできます


1. インデックスを作成します ($client->indices()->create())

      $params = [                'index' => 'user_index',  //索引名(相当于mysql的数据库)
                'body' => [                    'mappings' => [                        'normal_type' => [ //类型名(相当于mysql的表)
                            '_all'=>[   //  是否开启所有字段的检索
                                'enabled' => 'false'
                            ],                            'properties' => [ //文档类型设置(相当于mysql的数据类型)
                                'uid' => [                                    'type' => 'integer' // 字段类型为整型
                                ],                                'username' => [                                    'type' => 'keyword' // 字段类型为关键字,如果需要全文检索,则修改为text,注意keyword字段为整体查询,不能作为模糊搜索
                                ],                                'platform' => [                                    'type' => 'keyword'
                                ],                                'mobile' => [                                    'type' => 'integer'
                                ],                                'sex' => [                                    'type' => 'integer'
                                ],                                'source' => [                                    'type' => 'keyword'
                                ],                                'province' => [                                    'type' => 'keyword'
                                ],                                'city' => [                                    'type' => 'keyword'
                                ],                              'tag' =>   [                                'properties'    =>  [                                    'tagName'   =>[                                        'type' => 'text'
                                    ],                                    'tagWeight'   => [                                        'type' => 'integer',
                                    ]
                                ]
                            ],
                            ]
                        ]
                    ]
                ]
            ];
            $data = $client->indices()->create($params);

簡単なインデックスが作成されました。これで、新しく作成されたインデックス情報を取得できます。

2インデックス情報の取得

2.1 インデックス情報の取得 ($client->indices()->getSettings())

     $params = [                'index' => 'user_index',                'client' => [                    'ignore' => 404
                ]
            ];
    $res = $client->indices()->getSettings($params);//获取库索引设置信息

返される結果は次のとおりです:

  array (    'user_index' => 
    array (    'settings' => 
    array (      'index' => 
      array (        'creation_date' => '1498116455327',        'number_of_shards' => '5',        'number_of_replicas' => '1',        'uuid' => '8pkONoI7RAuw5HjnFa4UaQ',        'version' => 
        array (          'created' => '5020299',
        ),        'provided_name' => 'user_index',
        ),
      ),
    ),
 )

2.2 マッピング情報の取得

Interface: $ client->indices()-> ;getMapping

  • $params = [                'index' => 'user_index',                'client' => [                    'ignore' => 404
                    ]
                ];
    $res = $client->indices()->getMapping($params);   //获取mapping信息

    返される結果は次のとおりです:

    array (  'user_index' => 
      array (    'mappings' => 
        array (      'normal_type' => 
          array (        '_all' => 
            array (          'enabled' => false,
            ),        'properties' => 
            array (          'city' => 
              array (            'type' => 'keyword',
              ),          'mobile' => 
              array (            'type' => 'integer',
              ),          'platform' => 
              array (            'type' => 'keyword',
              ),          'province' => 
              array (            'type' => 'keyword',
              ),          'sex' => 
              array (            'type' => 'integer',
              ),          'source' => 
              array (            'type' => 'keyword',
              ),          'uid' => 
              array (            'type' => 'integer',
              ),          'username' => 
              array (            'type' => 'keyword',
              ),
            ),
          ),
        ),
      ),
    )
  • ここで取得した関連情報は、作成したばかりのインデックスを動的に変更し、関連情報を追加できるということです。

2.3 マッピング情報の変更/追加

注: 確立されたフィールドのタイプは変更できません

  • Interface: $client->indices()->putMapping();

  •         $params = [            'index' => 'user_index',  //索引名(相当于mysql的数据库)
                'type'  => 'normal_type',            'body'  =>  [                'normal_type' => [                    'properties'    =>[                        'tag'   =>[                            'type'  => 'text'
                            ]
                        ]
                    ]
                ]
            ];
    $client->indices()->putMapping($params);

    2.4 削除Index

Interface:$ client->indices()->delete($params);

  •         $params = [            'index' => 'user_index',  //索引名(相当于mysql的数据库)
            ];

    3 追加、削除、変更、確認

  • 3.1 データを追加

単一データ挿入

  • インターフェース: $client->index()

  • $params = [    'index' => 'my_index',    'type' => 'my_type',    'id' => 'my_id', // 不填则es会自动生成唯一的id
        'body' => [ 'testField' => 'abc']
    ];
    $response = $client->index($params);

  • バッチデータ挿入
  • インターフェース: $client->bulk();

  •                 foreach($userList as $value){
                        $params['body'][] = [                        'index' => [                            '_index' => 'user_index',                            '_type' => 'normal_type',                            '_id'  =>$value['uid']
                            ]
                        ];
                        $params['body'][] = [                        'uid' => $value['uid'],                        'username' => $value['username'],                        'platform' => $value['platform'],                        'mobile' => $value['mobile'],                        'province' => $value['province'],                        'city' => $value['city'],                        'sex' => $value['gender '],                        'source'=>'xxx'
                        ];
                    }
                    $responses = $client->bulk($params);

  • ps:挿入時ループ内に大量のデータがある場合は、PHP のメモリ制限の問題に注意する必要があります (このフレームワークのどの部分が動作後にメモリを解放しないのかは不明です)
  • 3.2 データの検索

単一データ検索、ただし ID が必要

  • インターフェース: $client->get ()

  • $params = [    'index' => 'my_index',    'type' => 'my_type',    'id' => 'my_id' // es 自动生成/自己录入的];
    $response = $client->get($params);

  • バッチ検索
  • インターフェース: $client->search()

  • $params = [  
        'index' =>  'my_index',   //['my_index1', 'my_index2'],可以通过这种形式进行跨库查询  
        'type' => 'my_type',//['my_type1', 'my_type2'],  
        'body' => [  
            'query' => [  
                'match' => [  // 搜索条件
                    'age' => '24' ,                'tag.tagName' =>'tag'  // 如果字段存储的是object.
                                           //这里搜索必须要这样才能搜索出结果.
                ]  
            ],  
            'from' => '0',  // 分页
            'size' => '200'  // 每页数量
            'sort' => [  // 排序
                'age' => 'desc'   //对age字段进行降序排序  
            ]  
        ]  
    ];  
    $res = $client->search($params);

    返されるデータはおおよそ次のとおりです:

    array (size=4)  'took' => int 2
      'timed_out' => boolean false
      '_shards' => 
        array (size=3)      'total' => int 5
          'successful' => int 5
          'failed' => int 0
      'hits' =>  // 搜索到数据
        array (size=3)      'total' => int 2
          'max_score' => float 1
          'hits' => // 具体数据包
            array (size=1)          0 => 
                array (size=5)
                  ...

多くの場合、mysqlのようなものを使用する必要があります/またはクエリes検索も実行できます。

  • 現時点では、esの組み合わせを使用しますfilter

  • https://www.elastic.co/guide/cn/elasticsearch/guide/current/ combing-filters.htmlの公式ドキュメントは以下の通りです

  • 以下はテスト済みの例です

  • {    "index": "xxx_index", 
        "type": "normal_type", 
        "body": {        "size": 20, 
            "from": 0, 
            "query": {            "bool": {                "must": [
                        {                        "match": {                            "tag.tagName": "xxxx"
                            }
                        }
                    ]
                }
            }, 
            "sort": {            "uid": "desc"
            }
        }
    }

    3.3 データの削除

注: データが削除されると、一定のキャッシュ更新時間があり、更新されない場合でも更新されます。

  • インターフェース: $client-> delete();

  • $param = [                'index' => 'my_index',                'type' => 'my_type',                'id'    => 'my_id'
                ];
                $ret = $this->client->delete($param);

    返されるデータは次のとおりです:

    array (size=7)  'found' => boolean true
      '_index' => string 'user_index' (length=10)  '_type' => string 'normal_type' (length=11)  '_id' => string 'AVzh_QnIZvcaH3gE7MvE' (length=20)  '_version' => int 2
      'result' => string 'deleted' (length=7)  '_shards' => 
        array (size=3)      'total' => int 2
          'successful' => int 1
          'failed' => int 0
  • 3.4 データを更新します

インターフェース: $client->update()

  • $params = [  
        'index' => 'my_index',  
        'type' => 'my_type',  
        'id' => '3416a75f4cea9109507cacd8e2f2aefc',  
        'body' => [  
            'doc' => [  // 必须带上这个.表示是文档操作
                'age' => 150  
            ]  
        ]  
    ];  
    $res = $client->update($params);

    結果を返す

    array (size=6)  '_index' => string 'user_index' (length=10)  '_type' => string 'normal_type' (length=11)  '_id' => string 'AVzh_QnIZvcaH3gE7Mw5' (length=20)  '_version' => int 2
      'result' => string 'updated' (length=7)  '_shards' => 
        array (size=3)      'total' => int 2
          'successful' => int 1 // 当数据没有发生变化时这里是为0
          'failed' => int 0
  • 4.異なるインデックス間でデータを反転する場合

注: 異なるインデックス間でデータを反転する場合、フィールドのタイプが異なるとインポートが失敗する原因となることに注意する必要があります。この時点でスクリプトを処理に使用できます。

このインターフェイスは phpapi では実行できず、レコードとして存在します
  • インターフェイス: POST _reindex
  • POST _reindex
    {  "source": {    "index": "user_profile"
      },  "dest": {    "index": "user_prfile_v1"
      },  "script": {    "inline": " ctx._source.tag=params.new_tags",    "params": {      "new_tags":{        "tagName":null,        "tagWeight":0
          }
        }
      }
    }

  • 著者: Tang Minzheng

    リンク:

    https://www.jianshu.com /p/a2837f487de6

関連する推奨事項:


インターフェイス API を呼び出す php メソッド

VueプロジェクトのAPI関連コードの構成について


以上がElasticsearch-PHP API の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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