0

I want to connect to our elasticsearch Server (V7.0.0) using the official PHP Client. The elasticsearch Documentation states that mapping types have been removed in Version 6.0.0.

But in the whole official PHP Client documentation types are still mentioned and seem necessary (e.g.):

// Set the index and type
$params = [
    'index' => 'my_index',
    'type' => 'my_type2',
    'body' => [
        'my_type2' => [
            '_source' => [
                'enabled' => true
            ],
            'properties' => [
                'first_name' => [
                    'type' => 'keyword',
                    'analyzer' => 'standard'
                ],
                'age' => [
                    'type' => 'integer'
                ]
            ]
        ]
    ]
];

// Update the index mapping
$client->indices()->putMapping($params);

Source

Can anyone explain to me why I still have to use types when they have been removed?

4

2 回答 2

1

映射types已在 中删除Elasticsearch 7.x。在以前的版本中(Elasticsearch 6.x每个索引只需要指定一种类型),而在版本中,每个索引2.x - 5.6可以使用多个类型。请检查您的文档版本。

既然你有Elasticsearch 6.0.0,你需要指定映射类型,我不太确定这API是否适用于较新版本的Elasticsearch 7.X

这是版本矩阵php API

Elasticsearch Version   Elasticsearch-PHP Branch
>= 6.6, < 7.0                              6.7.x
>= 6.0, < 6.6                              6.5.x
>= 5.0, < 6.0                                5.0
>= 2.0, < 5.0                         1.0 or 2.0
>= 1.0, < 2.0                         1.0 or 2.0
<= 0.90.x                                    0.4
于 2019-06-03T10:47:08.030 回答
0

Elasticsearch 7.15 使用 php 8.0 版本。在 localhost 中映射 Elasticsearch 7.15 中的数据库表

<?php
    require 'includes/connection.php';
    require 'vendor/autoload.php';

    class SearchElastic {
        
        private $elasticclient = null;
        
        public function __construct(){
            $db = new Connection();
            $this->con = $db->connect();
            //echo "<pre>";print_r($this->con); //die;
            
            $hosts = [
                'http://localhost:9200'        // SSL to localhost
            ];
            
            $this->elasticclient = Elasticsearch\ClientBuilder::create()->setHosts($hosts)->build();
        }
        
        public function Mapping(){
            $params = ['index' => 'employees'];
            $response = $this->elasticclient->indices()->delete($params);
            $params = [
                'index' => 'employees',
                'body' => [             
                    'mappings' => [             
                        'properties' => [
                            'code' => [
                                'type' => 'integer'
                            ],
                            'name' => [
                                'type' => 'text'
                            ],
                            'created_at' => [
                                'type' => 'text'
                            ],
                            'last_updated' => [
                                'type' => 'text'
                            ],
                            'rank' => [
                                'type' => 'integer'
                            ],
                        ]                   
                    ]
                ]
            ];
            //echo "<pre>"; print_r($params); //die;
            $this->elasticclient->indices()->create($params);

        }
        
        public function Search($query){
            $client = $this->elasticclient;
            $result = array();

            $i = 0;

            $params = [
                'index' => 'employees',
                'type'  => '_doc',
                'body'  => [
                    'query' => [
                        'match' => ['name' => $query],
                    ],
                    'size' => 9,
                    'sort' => [
                        ['rank' =>  'desc'],
                    ],
                ],
            ];
            
            $query = $client->search($params);
            $hits  = sizeof($query['hits']['hits']);
            $hit   = $query['hits']['hits'];
            
            $result['searchfound'] = $hits;
            while ($i < $hits) {

                $result['result'][$i] = $query['hits']['hits'][$i]['_source'];

                $i++;
            }

            return  $result;
        }
        
        public function InsertData(){
            $this->Mapping();   
            $client = $this->elasticclient;
            $stmt = "SELECT * FROM `table_name` limit 1";
            $result = $this->con->query($stmt);
            
            $params = null;
            while ($row = $result->fetch_assoc()){  
                $params['body'][] = array(
                  'index' => array(
                    '_index' => 'employees',
                    '_type' => '_doc',
                    '_id' => $row['id'],
                  ) ,
                );
                $params['body'][] = [
                    'id'         => $row['id'],
                    'name'         => $row['name'],
                    'created_at'   => $row['created_at'],
                    'last_updated' => $row['last_updated'],
                    'rank'         => $row['rank'],
                ];
            }
            $responses = $client->bulk($params);
            //echo "<pre>"; print_r($responses); die;
            return true;
        }
        
        public function UpdateData(){      
            $client = $this->elasticclient;
            $stmt = "SELECT * FROM `table_name` limit 1, 1000";
            $result = $this->con->query($stmt);
            
            $params = null;
            while ($row = $result->fetch_assoc()){  
                $params['body'][] = array(
                  'index' => array(
                    '_index' => 'employees',
                    '_type' => 'rules_employee',
                    '_type' => '_doc',
                    '_id' => $row['id'],
                  ) ,
                );
                $params['body'][] = [
                    'id'         => $row['id'],
                    'name'         => $row['name'],
                    'created_at'   => $row['created_at'],
                    'last_updated' => $row['last_updated'],
                    'rank'         => $row['rank'],
                ];
                
            }
            $responses = $client->bulk($params);
            //echo "<pre>"; print_r($responses); die;
            return true;
        }
    }
?>
于 2021-12-20T08:27:48.357 回答