跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • ES 用 PHP 错误的创建了索引,居然没报错,目前处于生产环境中怎么修复?
未分類
21 2 月 2021

ES 用 PHP 错误的创建了索引,居然没报错,目前处于生产环境中怎么修复?

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); ?> 

那么问题来了:

  1. 为什么少了一个 mappings,ES 居然不报错???那么它默认是怎样处理该代码的,以怎样的 analyzer 和 tokenizer 来创建的 index ?目前只能搜索出有空格的结果,比如,我想搜“ABC”,那么“ABC DEF WXYZ”能搜出来,但“ABCDEFGHIJK”就搜不出来
  2. 目前处于生产环境中,那么该如何补救?
大佬有話說 (12)

  • 資深大佬 : zhuzhibin

    首先 create 的时候能否 catch 到异常呢?生产环境你们是如何发布以及部署的呢?

  • 資深大佬 : dilu

    你写 sql 的时候,没有加索引,mysql 会报错吗?

  • 資深大佬 : daxin945

    最笨的方法 再搭一个没问题的 es 然后找个可以维护的时间节点 倒下数据

  • 資深大佬 : wakzz

    es 不支持修改索引,所以建议新建一个索引,然后把旧索引数据迁移过去后,再通过别名直接指向新索引

  • 資深大佬 : faqqcn

    es 最骚的就是创建后,没有办法修改。

    你就只能新建一个索引,把数据导进去后,删掉原来的,再把新建的索引给个 alias,或者修改代码中连接的索引。

  • 資深大佬 : sadfQED2

    1.为啥没报错,你应该直接看 es 里面建出来是啥样的

    2.咋解决,先创建一个新的索引,然后双写两个索引,再起一个进程同步老数据,两边数据一致以后切到新索引,删除老索引

  • 資深大佬 : SjwNo1

    rebuild

  • 資深大佬 : sss495088732

    上 rebuild 正解~,可以先写好 template(mapping),index name regular 就可以了 0.0
    index 不大(不过亿)的话是非常快的
    20 分钟以内

  • 資深大佬 : vindurriel

    上生产环境之前还得先测一测的
    创建新的 index 确认 mapping 无误之后 用 reindex 或者 clone 接口导数据 名字用 alias 保持一致

  • 資深大佬 : qq1340691923

    为啥要用 es 呢

  • 資深大佬 : Jackeriss

    给索引加个别名,搜索的时候用别名,写入用真名,reindex 修改 mapping,完了之后替换别名

  • 資深大佬 : yuancoder

    没有报错是因为 mapping 不是必须的,es 会根据你的值自动识别。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具