ES 用 PHP 错误的创建了索引,居然没报错,目前处于生产环境中怎么修复?
資深大佬 : kisshere 5
目前我用 php 创建一个 index,ES 版本:6.7.2:
<?php $client = ClientBuilder::create()->build(); $params = [ 'index' => 'MyIndex', 'body' => [ 'settings' => [ 'number_of_shards' => 2, 'number_of_replicas' => 0 ], 'MyType' => [ 'properties' => [ 'title' => [ 'type'=>'text', 'analyzer'=>'thai', ], 'createTime' => [ 'type'=>'integer', 'index' => false ], 'uid' => [ 'type'=>'integer' ] ] ] ] ]; $client->indices()->create($params); ?>
目前几乎 query 不出来任何结果,一查 ES 官网,发现居然写错了,少加了一个 mapping,正确的应该是:
<?php $client = ClientBuilder::create()->build(); $params = [ 'index' => 'MyIndex', 'body' => [ 'settings' => [ 'number_of_shards' => 2, 'number_of_replicas' => 0 ], 'mappings' => [ 'MyType' => [ '_source' => [ 'enabled' => true ], 'properties' => [ 'title' => [ 'type'=>'text', 'analyzer'=>'thai', ], 'createTime' => [ 'type'=>'integer', 'index' => false ], 'uid' => [ 'type'=>'integer' ] ] ] ] ] ]; $client->indices()->create($params); ?>
那么问题来了:
- 为什么少了一个 mappings,ES 居然不报错???那么它默认是怎样处理该代码的,以怎样的 analyzer 和 tokenizer 来创建的 index ?目前只能搜索出有空格的结果,比如,我想搜“ABC”,那么“ABC DEF WXYZ”能搜出来,但“ABCDEFGHIJK”就搜不出来
- 目前处于生产环境中,那么该如何补救?
大佬有話說 (12)