正經學徒,佛系記錄,不搞事情
2.*的版本,字元串類型為string
5.*之後的版本,字元串類型區分為keyword和text,設定string字段會提示為過時類型
最大的差別在于:
- keyword:存儲資料時不會分詞建立索引,常用于對文檔進行過濾、排序、聚合的操作
- text:存儲資料會自動分詞,并生成索引,用于全文索引的字段
由此兩種類型的對應使用場景就不同了,這裡建立一個person索引,新增兩個字段str_keyword,str_text,類型分别對應keyword和text
添加一條記錄
判斷兩個字段的分詞情況
可見keyword未被分詞,而text被分詞成just、test
是以進行term查詢時,str_keyword将查詢不到記錄,因為被分詞成just、test
另一個方面,進行聚合查詢時,keyword可以直接執行,且效率更高,而text聚合時需要特定的給字段啟用Fielddata,而啟用Fielddata将會導緻消耗大量堆空間,更多關于 Fielddata 可點選檢視。
添加資料進行聚合測試:
keyword類型可直接聚合
text類型無法直接聚合
提示“Fielddata is disabled on text fields by defaul”,“Fielddata預設禁用”,需要手動設定啟用
再次進行查詢時查詢成功
注:雖然能夠通過設定fielddata讓text類型也支援聚合、排序等操作,但是盡量避免使用該方式。
推薦做法:
- 将需要排序、聚合的字段類型設定為keyword類型。
- 如果該字段一定需要text類型來作全文檢索,則添加一個類型為keyword的新字段與之對應,單獨用于作聚合、排序操作