java吧 关注:1,196,370贴子:12,617,857

我出个题,肯定没人能回答出来

只看楼主收藏回复

es集群中,如果文档一个字段本来没有分词,现在我要让这个字段分词,怎么实现,es集群不能关


IP属地:广东来自Android客户端1楼2023-09-07 16:41回复
    不是,真没人知道吗?背面试官狠狠拷打了


    IP属地:广东来自Android客户端2楼2023-09-07 17:05
    回复


      IP属地:广东来自Android客户端3楼2023-09-07 17:23
      回复
        这有什么难度?


        IP属地:四川来自Android客户端4楼2023-09-07 21:42
        回复
          在 Elasticsearch 中实现文档字段的分词,可以通过修改文档的 mapping 来实现。具体步骤如下:
          1. 创建新的索引:首先,需要创建一个新的索引,指定具体的 mapping 配置。例如,可以在索引创建时指定一个新的 mapping 配置,将目标字段设置为 `text` 类型。可以使用以下命令创建索引:
          ```bash
          PUT my_new_index
          {
          "mappings": {
          "properties": {
          "my_field": {
          "type": "text"
          }
          }
          }
          }
          ```
          2. 将旧索引数据导入新索引:接下来,需要将旧索引中的数据导入到新索引中。可以使用 Elasticsearch 中的 reindex API 将数据从旧索引中导入到新索引中。可以使用以下命令:
          ```bash
          POST _reindex
          {
          "source": {
          "index": "my_old_index"
          },
          "dest": {
          "index": "my_new_index"
          }
          }
          ```
          这个命令会将 `my_old_index` 中的数据导入到 `my_new_index` 中。
          3. 修改应用程序查询逻辑:最后,需要修改应用程序中查询时的查询字符串,以使其按照新的 mapping 配置进行查询。
          通过以上步骤,即可实现文档字段的分词。需要注意的是,这种方式需要重新创建新的索引,并将旧索引中的数据导入到新的索引中,因此可能造成一定的性能影响。需要根据具体情况进行权衡和选择。


          IP属地:福建来自Android客户端5楼2023-09-08 01:35
          收起回复
            他是不是想问你reindex


            IP属地:广东来自iPhone客户端6楼2023-09-08 12:25
            回复
              这就是大厂的面试吗?头一回听说还面试es的,这属于运维干的


              IP属地:广西来自Android客户端7楼2023-09-08 13:42
              收起回复
                es不会


                IP属地:四川来自Android客户端8楼2023-09-08 16:05
                回复
                  es文档类型定了就不允许被改变,像这种中途让加检索的,只能通过重新建立一个字段,以供检索。


                  IP属地:北京9楼2023-09-08 16:52
                  回复
                    现在java面试还要Elasticsearch集群吗,完全就是故意恶心你


                    IP属地:浙江来自Android客户端11楼2023-09-08 23:29
                    收起回复
                      reindex到新索引上,删除旧的索引,再reindex回去


                      IP属地:广东来自Android客户端12楼2023-09-09 02:14
                      收起回复
                        内嵌字段field


                        IP属地:四川来自Android客户端13楼2023-09-09 08:54
                        回复
                          一个经常用的,想为text字段再存储个keyword,就会用到内嵌字段,es就会为这个字段再存储一个不分词的情况,反之同理


                          IP属地:四川来自Android客户端14楼2023-09-09 08:56
                          回复
                            大厂要要,而且是必备的,但也不排除小公司会问,有闲心可以去了解一下


                            IP属地:贵州15楼2023-09-11 11:05
                            收起回复
                              ES集群中对已存在字段进行分词转换可以通过以下步骤实现,无需关闭集群:
                              1. 创建新的索引,并定义要分词的字段的mapping使用text类型,进行正确的分词器设置。
                              2. 重新索引数据,将数据复制到新建的索引中。可以使用reindex API完成重新索引。
                              3. 将索引别名swap切换到新的索引上。
                              4. 修改应用程序代码,将查询请求发送到新的索引别名。
                              5. 可选:保留旧索引一段时间,以备回退。
                              6. 最终可以删除旧索引释放空间。
                              整个过程会有短暂的两个索引并存,旧索引和新索引别名,应用程序先切换到新索引别名上后,再删除旧索引即可。
                              reindex 可以根据条件进行批量重新索引,确保服务不中断。别名swap也确保服务切换平滑。整个过程无需关闭ES集群即可完成。


                              IP属地:广西16楼2023-09-13 15:05
                              回复