Elasticsearch 8.x中不再支持URL中的type参数

2022-09-11 12:59:02 浏览数 (1)

当创建索引的时候你可能会遇到以下错误提示

{"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"The mapping definition cannot be nested under a type [_doc] unless include_type_name is set to true."}],"type":"illegal_argument_exception","reason":"The mapping definition cannot be nested under a type [_doc] unless include_type_name is set to true."},"status":400}

原因是Elasticsearch 8.x中不再支持URL中的type参数,include_type_name参数默认为false。如果需要开启,把include_type_name 设置为支持type参数即可。

在laravel中使用composer require elasticsearch/elasticsearch 扩展实例,下面贴出创建索引代码和配置如下:

代码语言:javascript复制
<?php
// 得到es客户端对象
        $client = ClientBuilder::create()->setHosts(config('es.host'))->build();
        // 创建索引
        $params = [
            // 生成索引的名称
            'index' => 'fang',
            'include_type_name' => true,//Elasticsearch 8.x中不再支持URL中的type参数
            // 类型 body
            'body' => [
                 //number_of_replicas 是数据备份数,如果只有一台机器,设置为0
                 //number_of_shards  是数据分片数,默认为5,有时候设置为3
                 //可以在线改所有配置的参数,number_of_shards不可以在线改
                'settings' => [
                    // 分区数
                    'number_of_shards' => 5,
                    // 副本数
                    'number_of_replicas' => 1
                ],
                'mappings' => [
                    '_doc' => [
                        '_source' => [
                            'enabled' => true//获取原数据
                        ],
                        // 字段  类似表字段,设置类型
                        'properties' => [
                            'fang_name' => [
                                // 相当于数据查询是的 = 张三你好,必须找到张三你好
                                'type' => 'keyword'
                            ],
                            'fang_desn' => [
                                'type' => 'text',
                                // 中文分词  张三你好   张三  你好 张三你好
                                'analyzer' => 'ik_max_word',
                                'search_analyzer' => 'ik_max_word'
                            ]
                        ]
                    ]
                ]
            ]
        ];
        // 创建索引
        $response = $client->indices()->create($params);

        dump($response);
?>
代码语言:javascript复制
array:3 [▼
  "acknowledged" => true
  "shards_acknowledged" => true
  "index" => "fang"
]
代码语言:javascript复制
//添加数据
<?php
 // es数据的添加
        // 得到es客户端对象
        $client = ClientBuilder::create()->setHosts(config('es.host'))->build();
        // 写文档
        $params = [
            'index' => 'fang',
            'type' => '_doc',
            'id' => $model->id,
            'body' => [
                'fang_name' => $model->fang_name,
                'fang_desn' => $model->fang_desn,
            ],
        ];
        // 添加数据到索引文档中
        $client->index($params);

0 人点赞