gpt4 book ai didi

php - Elasticsearch :使用通配符作为属性名称来映射属性类型

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

我想将映射应用于所有属性。我可以不命名属性(property)而这样做吗?

例如

'body' => [
'doc_type' =>
'properties' =>
'networks' =>
'properties' => [
'*' => ['type' => 'integer']
]
]
]
]
]

代替:
'properties' => [
'vip10415' => ['type' => 'integer'],
'vip86485' => ['type' => 'integer'],
'vip23465' => ['type' => 'integer'],
'vip97949' => ['type' => 'integer']
....
]

我要这样做的原因是因为直到运行时才知道将使用什么属性。

我知道查询可以有通配符,但还没有看到映射是否可以。我查看了动态映射,但它不能像这样工作。

更新:

我尝试插入int并让elastic推断它们的类型,但是它将它们解析为'long'类型。我使用php插入,并确保它们具有intval()函数的int值。

更新:

“属性”实际上是嵌套属性“网络”的子字段。直到运行时才知道要存储为int的属性的名称。

更新:

我尝试在doc_type中应用@bittusarkar推荐的动态映射模板,但是它引发了无法解析映射异常的情况。
"dynamic_templates" => [
"integers" => [
"match_mapping_type" => "long",
"mapping" => [
"type" => "integer"
]
]
]

最佳答案

如果这些字段实际上是整数类型,则甚至不需要在映射中显式定义它们。只需有一个空的映射,并开始使用这些字段为文档建立索引。 Elasticsearch可以推断字段的类型并动态更新映射。您要问的内容也可以通过动态模板来实现,但是IMO可能会太过分了。

由于您希望类型为integer而不是默认的long,因此dynamic templates是答案。请参阅下面的映射定义。它将把检测到类型为long类型的任何字段的类型转换为integer类型。

{
"mappings": {
"mapping_name": {
"dynamic_templates": [
{
"convertToInteger": {
"match_mapping_type": "long",
"mapping": {
"type": "integer"
}
}
}
]
}
}
}

关于php - Elasticsearch :使用通配符作为属性名称来映射属性类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35339359/

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