Es的text和keyword類型以及如何修改類型

昨天同事觸發定時任務發現es相關服務報了一個序列化問題,

今天早上捕獲異常將異常堆棧全部打出來看,才發現是聚合的字段不是keyword類型的問題。

到kibbna命令行執行也是一樣的錯誤

使用 /_mapping查看索引的字段類型,才發現userUniqueid是text類型

如果用text執行聚合,還必須在字段名后面加上 userUniqueid.keyword才能聚合。

需要重新建索引,指定類型!

這里說說text和keyword的區別

Text

????????當一個字段是要被全文檢索時,比如 Email 內容、產品描述,這些字段應該使用 text 類型。設置 text 類型以后,字段內容會被分析,在生成倒排索引之前,字符串會被分析器分成一個個詞項。text類型的字段不用于排序,很少用于聚合。????????

注意事項

  • 適用于全文檢索:如 match 查詢。
  • 文本字段會被分詞。
  • 默認情況下,會創建倒排索引。
  • 自動映射器會為 Text 類型創建 Keyword 字段。

Keyword

????????Keyword 類型適用于不分詞的字段,如姓名、Id、數字等。如果數字類型不用于范圍查找,用 Keyword 的性能要高于數值類型。

注意事項

  • Keyword 不會對文本分詞,會保留字段的原有屬性,包括大小寫等。
  • Keyword 僅僅是字段類型,而不會對搜索詞產生任何影響。
  • Keyword 一般用于需要精確查找的字段,或者聚合排序字段。
  • Keyword 通常和 Term 搜索一起用。
  • Keyword 字段的?ignore_above?參數代表其截斷長度,默認 256,如果超出長度,字段值會被忽略,而不是截斷,忽略指的是會忽略這個字段的索引,搜索不到,但數據還是存在的。

那怎么將text類型修改為keyword呢?es不提供單個修改索引字段類型的方法,只能先創建一個中間索引(mappings里字段類型為keyword),然后將原索引數據遷移到這個索引里,再將原索引刪除,創建一個新的原索引名的索引(注意mappings保持和中間索引一致),再將中間索引的數據遷移到新的索引里。刪除中間索引。

從text類型修改為keyword類型

1 創建中間索引


PUT /tmp_index
{ ?"mappings":{"properties": {"appendixUrl": {"type": "keyword","index": false,"ignore_above": 256},"createTime": {"type": "date"},"department": {"type": "keyword","ignore_above": 256},"doctorName": {"type": "keyword","ignore_above": 256},"firmId": {"type": "keyword","ignore_above": 256},"grantUniqueId": {"type": "keyword","ignore_above": 256},"hospitalNumber": {"type": "keyword","ignore_above": 256},"notifyStatus": {"type": "long"},"overdueSigned": {"type": "keyword","ignore_above": 256},"patientCardNum": {"type": "keyword","ignore_above": 256},"patientName": {"type": "keyword","ignore_above": 256},"practicePlace": {"type": "keyword","ignore_above": 256},"recipeInfo": {"type": "keyword","index": false,"ignore_above": 256},"refuseReason": {"type": "keyword","index": false,"ignore_above": 256},"selfAuthId": {"type": "keyword","ignore_above": 256},"signTime": {"type": "date"},"signedPdfUrl": {"type": "keyword","index": false,"ignore_above": 256},"stampLogId": {"type": "keyword","index": false,"ignore_above": 256},"status": {"type": "long"},"subject": {"type": "keyword","ignore_above": 256},"sysTag": {"type": "keyword","ignore_above": 256},"tag": {"type": "text","analyzer": "comma","fielddata": true},"uniqueid": {"type": "keyword","ignore_above": 256},"upDefault1": {"type": "keyword","ignore_above": 256},"upDefault2": {"type": "keyword","ignore_above": 256},"updateTime": {"type": "date"},"urid": {"type": "keyword","ignore_above": 256},"userUniqueid": {"type": "keyword","ignore_above": 256}}
}
}

但因為未指定setting還報錯

{"error" : {"root_cause" : [{"type" : "mapper_parsing_exception","reason" : "Failed to parse mapping [_doc]: analyzer [comma] has not been configured in mappings"}],"type" : "mapper_parsing_exception","reason" : "Failed to parse mapping [_doc]: analyzer [comma] has not been configured in mappings","caused_by" : {"type" : "illegal_argument_exception","reason" : "analyzer [comma] has not been configured in mappings"}},"status" : 400
}

需要將setting也指定

GET /索引名/_settings查看索引的setting
加上settings再創建索引
"settings" : {
? ? ? ? "analysis" : {
? ? ? ? ? "analyzer" : {
? ? ? ? ? ? "comma" : {
? ? ? ? ? ? ? "pattern" : ",",
? ? ? ? ? ? ? "type" : "pattern"
? ? ? ? ? ? }
? ? ? ? ? }
? ? ? ? }
? ? ? }
? ?

2 遷移數據

POST _reindex?wait_for_completion=false
{"source": {"index": "源索引名"},"dest": {"index": "tmp_index"}
}

3 刪除源索引

DELETE 源索引名

4 重建相同名稱的源索引名索引

同步驟1的命令


5 遷移數據

同步驟2,將源和目標索引互換一下即可

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/80445.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/80445.shtml
英文地址,請注明出處:http://en.pswp.cn/web/80445.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大語言模型 07 - 從0開始訓練GPT 0.25B參數量 - MiniMind 實機訓練 預訓練 監督微調

寫在前面 GPT(Generative Pre-trained Transformer)是目前最廣泛應用的大語言模型架構之一,其強大的自然語言理解與生成能力背后,是一個龐大而精細的訓練流程。本文將從宏觀到微觀,系統講解GPT的訓練過程,…

【Android】從Choreographer到UI渲染(二)

【Android】從Choreographer到UI渲染(二) Google 在 2012 年推出的 Project Butter(黃油計劃)是 Android 系統發展史上的重要里程碑,旨在解決長期存在的 UI 卡頓、響應延遲等問題,提升用戶體驗。 在 Androi…

mvc-ioc實現

IOC 1)耦合/依賴 依賴,是誰離不開誰 就比如上訴的Controller層必須依賴于Service層,Service層依賴于Dao 在軟件系統中,層與層之間存在依賴。我們稱之為耦合 我們系統架構或者設計的一個原則是&#xff…

MATLAB安裝常見問題解決方案

目前新版本的matlab安裝往往需要十幾G的本地安裝容量,例如matlab2022b、matlab2023b, 首先就是要保證本地硬盤空間足夠大,如果沒有足夠的本地內存空間,那么可以嘗試釋放本地硬盤空間,或者安裝所需內存空間較小的舊版本的matlab&am…

程序代碼篇---python獲取http界面上按鈕或者數據輸入

文章目錄 前言 前言 本文簡單接受了python獲取http界面上按鈕或者數據輸入

深入理解 Cortex-M3 特殊寄存器

在上一篇文章中分享了 Cortex-M3 內核寄存器組的相關知識,實際上除了內核寄存器組外,CM3 處理器中還存在多個特殊寄存器,它們分別為 程序狀態寄存器,中斷/異常屏蔽寄存器 和 控制寄存器。 需要注意的是,特殊寄存器未經…

標準庫、HAl庫和LL庫(PC13初始化)

標準庫 (Standard Peripheral Library) c #include "stm32f10x.h"void GPIO_Init_PC13(void) {GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);GPIO_InitStruct.GPIO_Pin GPIO_Pin_13;GPIO_InitStruct.GPIO_Mode GPIO_…

基于開源鏈動2+1模式AI智能名片S2B2C商城小程序的低集中度市場運營策略研究

摘要:本文聚焦于行業市場集中度問題,探討在低集中度市場中,如何利用開源鏈動21模式AI智能名片S2B2C商城小程序開展有效運營。分析了高集中度市場的競爭劣勢,闡述了開源鏈動21模式、AI智能名片以及S2B2C商城小程序的功能特點及其在…

一文讀懂-嵌入式Ubuntu平臺

現在直接在一些嵌入式Soc上移植ubuntu來用到產品上,剛開始感覺還挺臃腫的,后來細聊了下感覺還是有一定的優勢。 ubuntu相信大家在熟悉不過了,幾乎無處不在,小到咖啡機,大到火星車,為什么ubuntu如此廣泛&am…

箭頭函數及其與普通函數區別的詳細解釋

一、箭頭函數的基本特性 語法簡潔性 箭頭函數使用 > 符號定義,省略 function 關鍵字,適合快速定義匿名函數或簡單表達式。 // 普通函數 function sum(a, b) { return a b; } // 箭頭函數 const sum (a, b) > a b;若函數體為單行表達式&#x…

el-scrollbar 獲取滾動條高度 并將滾動條保持在低端

首先我們用ref綁定一個 scrollbar <el-scrollbar style"height: 100%;" ref"chatScrollRef" scroll"scrollTest">用scroll觸發滾動事件&#xff0c;一路滾到最底下&#xff0c;觀察三個屬性 const scrollTest ({scrollTop}) > {conso…

MyBatis-Plus 的 updateById 方法不更新 null 值屬性的問題

項目場景&#xff1a; 使用Mybatis-plus的updateById去更新實體類的時候&#xff0c;如果設置實體類中的某個字段為null&#xff0c;會導致為null的字段不做更新操作 問題描述 updateById方法 不會更新null值 解決方案&#xff1a; 在字段上加上 TableField(updateStrategy …

STC89C52單片機模擬實現洗衣機控制 Proteus仿真

用直流電機轉動模擬洗衣機。要求有弱洗、普通洗、強洗三種模式,可通過按鍵選擇相應模式。要求能夠設置洗衣時長,可以通過按鍵選擇15、30、45、60、90分鐘。定時結束時蜂鳴器報警提示。LCD顯示相關信息。 基本功能描述用單片機模擬實現洗衣機控制。用直流電機轉動模擬洗衣機運…

游戲引擎學習第290天:完成分離渲染

game_sim_region.cpp&#xff1a;在BeginSim中移除EntityOverlapsRectangle調用 現在我們接近一個關鍵點&#xff0c;雖然還沒完全結束&#xff0c;但我們已經把所有東西遷移到了一個新概念上——即那些臨時創建的控制器結構&#xff0c;稱為“腦”&#xff08;brains&#xf…

JavaScript性能優化實戰(12):大型應用性能優化實戰案例

在前面的系列文章中,我們探討了各種JavaScript性能優化技術和策略。本篇將聚焦于實際的大型應用場景,通過真實案例展示如何綜合運用這些技術,解決復雜應用中的性能挑戰。 目錄 電商平臺首屏加載優化全流程復雜數據可視化應用性能優化案例在線協作工具的實時響應優化移動端W…

Linux 安裝 Unreal Engine

需要對在unreal engine官網進行綁定github賬號&#xff0c;然后到unreal engine github倉庫中進行下載對應的版本&#xff0c;并進行安裝unreal engine官網 github地址

2.2.4

import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error, r2_score import joblib from xgboost import XGBRegressor # 加載數據集 file_path 大學…

使用IDEA創建Maven版本的web項目以及lombok的使用

1.新建項目 2.修改pom.xml 3.修改項目結構 4.在main/java下面寫一個Servlet測試一下 然后當前頁面往下滑 -Dfile.encodingUTF-8編寫一句輸出語句&#xff0c;測試是否成功部署配置&#xff0c;并選擇到正確的位置&#xff1a; 回車以后 再回到idea里面&#xff0c;發現控…

【數據結構】1-3 算法的時間復雜度

數據結構知識點合集&#xff1a;數據結構與算法 ? 知識點 ? 時間復雜度的定義 1、算法時間復雜度 事前預估算法時間開銷T(n)與問題規模 n 的關系&#xff08;T 表示 “time”&#xff09; 2、語句頻度 算法中語句的執行次數 對于以上算法&#xff0c;語句頻度&#xff1a;…

【Python 算法零基礎 3.遞推】

壓抑與痛苦&#xff0c;那些輾轉反側的夜&#xff0c;終會讓我們更加強大 —— 25.5.16 一、遞推的概念 遞推 —— 遞推最通俗的理解就是數列&#xff0c;遞推和數列的關系就好比 算法 和 數據結構 的關系&#xff0c;數列有點像數據結構中的線性表(可以是順序表&#xff0c;也…