elasticsearch - 如何在使用 Java API 创建索引时使用模板
问题描述
我正在尝试创建一个索引,每次重新创建它时都会有一个共同的结构。我在 ES 上创建了一个模板,并希望在通过 Java 程序创建和填充索引时使用它。从 Java API 创建索引时如何使用索引模板。
索引模板
PUT _template/quick-search
{
"index_patterns": ["quick-search*"],
"settings": {
"number_of_shards": 1
},
"mappings": {
"_source": {
"enabled": false
},
"properties": {
"item" : {
"type" : "long"
},
"description" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"id" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
}
解决方案
由于您添加了索引模板,如果您现在尝试将文档保存在不存在的索引上,并且它的名称将与您在模板中提供的模式匹配"index_patterns": ["quick-search*"]
,elasticsearch 将根据模板,而不是根据您的输入创建映射。
此外,如果您尝试创建新索引并尝试设置映射(再次与模式匹配),则模板将作为默认模板。因此,对于新索引,您可以将类型设置为keyword
for item
。这将覆盖long
模板的默认设置,但其他设置将从模板中获取并且也会出现。
为了测试去kibana并设置你的模板
PUT _template/quick-search
{
"index_patterns": [
"quick-search*"
],
"settings": {
"number_of_shards": 1
},
"mappings": {
"_source": {
"enabled": false
},
"properties": {
"item": {
"type": "long"
},
"description": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"id": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
然后尝试新建索引,但是item需要是关键字
PUT quick-search-item-keyword
{
"mappings": {
"properties": {
"item": {
"type": "keyword",
"index": true
}
}
}
}
GET quick-search-item-keyword/_mapping
现在只需将文档保存在不存在的索引中
POST quick-search-test-id/_doc/
{
"id": "test"
}
GET quick-search-test-id/_mapping
尝试将同一文档保存在不存在且与模板的索引模式不匹配的索引中
POST test/_doc/
{
"id": "test"
}
GET test/_mapping
如果您使用 java 客户端,则没有什么不同。同样适用
推荐阅读
- javascript - 没有 webpack 的 Electron + React + CSS 加载器
- spring-boot - 如何通过 Jackson 使用 json 在 Redis 中轻松缓存 Kotlin 对象?
- vue.js - 播放带字幕的视频 - Vue.js
- c# - 在 C#.Net 中为 MySQL 制作可能包含 utf-8 字符的字符串
- php - 在特定 DIV 中显示时隐藏 DIV
- django - 获取和创建序列化程序的不同逻辑
- android - 如何在 Android Studio 中恢复或重新创建损坏的布局
- r - R中的等高线图和外部函数
- ios - Iterating over a for loop X amount of times from textfield input
- powershell - 使用文本文件循环 PowerShell 命令