目前我用 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);
?>
那么问题来了:
1
zhuzhibin 2021-03-02 09:09:48 +08:00 via iPhone
首先 create 的时候能否 catch 到异常呢?生产环境你们是如何发布以及部署的呢?
|
2
dilu 2021-03-02 09:10:10 +08:00 via Android
你写 sql 的时候,没有加索引,mysql 会报错吗?
|
3
daxin945 2021-03-02 09:12:56 +08:00
最笨的方法 再搭一个没问题的 es 然后找个可以维护的时间节点 倒下数据
|
4
wakzz 2021-03-02 09:16:13 +08:00
es 不支持修改索引,所以建议新建一个索引,然后把旧索引数据迁移过去后,再通过别名直接指向新索引
|
5
Rache1 2021-03-02 09:17:36 +08:00
es 最骚的就是创建后,没有办法修改。
你就只能新建一个索引,把数据导进去后,删掉原来的,再把新建的索引给个 alias,或者修改代码中连接的索引。 |
6
sadfQED2 2021-03-02 09:23:45 +08:00 via Android
1.为啥没报错,你应该直接看 es 里面建出来是啥样的
2.咋解决,先创建一个新的索引,然后双写两个索引,再起一个进程同步老数据,两边数据一致以后切到新索引,删除老索引 |
7
SjwNo1 2021-03-02 09:36:57 +08:00
rebuild
|
8
sss495088732 2021-03-02 09:45:21 +08:00
楼上 rebuild 正解~,可以先写好 template(mapping),index name regular 就可以了 0.0
index 不大(不过亿)的话是非常快的 20 分钟以内 |
9
vindurriel 2021-03-02 10:56:15 +08:00 via iPhone
上生产环境之前还得先测一测的
创建新的 index 确认 mapping 无误之后 用 reindex 或者 clone 接口导数据 名字用 alias 保持一致 |
10
qq1340691923 2021-03-02 14:07:30 +08:00
为啥要用 es 呢
|
11
Jackeriss 2021-03-02 14:31:44 +08:00
给索引加个别名,搜索的时候用别名,写入用真名,reindex 修改 mapping,完了之后替换别名
|
12
yuancoder 2021-03-02 15:57:05 +08:00
没有报错是因为 mapping 不是必须的,es 会根据你的值自动识别。
|