gpt4 book ai didi

java - 用于为映射建立索引的动态键的 ElasticSearch 映射

转载 作者:行者123 更新时间:2023-12-02 09:09:07 25 4
gpt4 key购买 nike

我有一个示例 json,我想将其索引到 elasticsearch 中。索引示例 Json:

put test/names/1
{
"1" : {
"name":"abc"
},
"2" : {
"name":"def"
},
"3" : {
"name":"xyz"
}

}

哪里,索引名称:测试,输入名称:名称,编号:1

现在elasticsearch生成的默认映射是:

{
"test": {
"mappings": {
"names": {
"properties": {
"1": {
"properties": {
"name": {
"type": "string"
}
}
},
"2": {
"properties": {
"name": {
"type": "string"
}
}
},
"3": {
"properties": {
"name": {
"type": "string"
}
}
},
"metadataFieldDefinition": {
"properties": {
"name": {
"type": "string"
}
}
}
}
}
}
}
}

如果映射大小从 3(当前)增加到假设的千或百万,则 ElasticSearch 将为每个映射创建一个映射,这可能会导致性能问题,因为映射集合将会很大。

我尝试通过设置创建映射:

"dynamic":false,
"type":object

但是它被ES覆盖了。因为它与索引数据不匹配。

请让我知道如何定义映射以便 ES.不会创建像上面这样的。

最佳答案

我认为在我们如何索引文档方面可能存在一些困惑。

put test/names/1
{...
document
...}

这表示:以下文档属于索引 test,类型为 name,ID 为 1。整个文档被视为类型 name。按目前的方式使用 PUT API,您无法同时索引多个文档。 ES 立即将 123 解释为类型对象的属性,每个属性都包含一个属性 name输入字符串。

实际上,ES 认为您正在尝试索引一个文档,而不是三个

要将许多文档放入具有某种名称类型的索引测试中,您可以使用 CURL 语法来执行此操作:

curl -XPUT"http://your-es-server:9200/test/names/1" -d'
{
"name": "abc"
}'

curl -XPUT"http://your-es-server:9200/test/names/2" -d'
{
"name": "ghi"
}'

curl -XPUT"http://your-es-server:9200/test/names/3" -d'
{
"name": "xyz"
}'

这将指定您索引到的端点中的文档 ID。您的映射将如下所示:

"test": {
"mappings": {
"names": {
"properties": {
"name": {
"type": "string"
}
}
}
}
}

最后一句话:将索引拆分为离散操作,或查看 Bulk API查看有关如何在单个请求中 POST 多个操作的语法。

关于java - 用于为映射建立索引的动态键的 ElasticSearch 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31991841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com