弹性搜索:地图 属性 类型使用通配符作为 属性 名称
Elastic search: map property types using wildcard for property name
我想对所有属性应用映射。我可以在不命名 属性.
的情况下这样做吗
例如
'body' => [
'doc_type' =>
'properties' =>
'networks' =>
'properties' => [
'*' => ['type' => 'integer']
]
]
]
]
]
而不是:
'properties' => [
'vip10415' => ['type' => 'integer'],
'vip86485' => ['type' => 'integer'],
'vip23465' => ['type' => 'integer'],
'vip97949' => ['type' => 'integer']
....
]
我想这样做的原因是直到运行时才知道将使用哪些属性。
我知道查询可以有通配符,但还没有看到映射是否可以。我查看了动态映射,但它不是这样工作的。
更新:
我试过插入整数并让 elastic 推断它们的类型,但它将它们解析为类型 'long'。我正在使用 php 插入并确保它们是具有 intval() 函数的整数。
更新:
'properties'实际上是嵌套属性'Networks'的子字段。要存储为 int 的 属性 的名称直到运行时才会知道。
更新:
我尝试在 doc_type 中应用@bittusarkar 推荐的动态映射模板,但它抛出了无法解析映射的异常。
"dynamic_templates" => [
"integers" => [
"match_mapping_type" => "long",
"mapping" => [
"type" => "integer"
]
]
]
使用 Dynamic Templates
:
PUT /my_index
{
"mappings": {
"my_type": {
"dynamic_templates": [
{
"analysed_string_template": {
"match": "*",
"mapping": {
"type": "integer"
}
}
}
]
}
}
}
在 here
学习更多
如果这些字段实际上是整数类型,您甚至不需要在映射中显式定义它们。只需拥有一个空映射并开始使用这些字段索引文档。 Elasticsearch 可以推断字段类型并动态更新映射。您所要求的也可以通过动态模板来实现,但在我看来,这太过分了。
既然您希望类型为 integer
而不是默认的 long
,那么 dynamic templates 就是答案。请参阅下面的映射定义。它将检测到类型为 long
的任何字段的类型转换为类型 integer
.
{
"mappings": {
"mapping_name": {
"dynamic_templates": [
{
"convertToInteger": {
"match_mapping_type": "long",
"mapping": {
"type": "integer"
}
}
}
]
}
}
}
我想对所有属性应用映射。我可以在不命名 属性.
的情况下这样做吗例如
'body' => [
'doc_type' =>
'properties' =>
'networks' =>
'properties' => [
'*' => ['type' => 'integer']
]
]
]
]
]
而不是:
'properties' => [
'vip10415' => ['type' => 'integer'],
'vip86485' => ['type' => 'integer'],
'vip23465' => ['type' => 'integer'],
'vip97949' => ['type' => 'integer']
....
]
我想这样做的原因是直到运行时才知道将使用哪些属性。
我知道查询可以有通配符,但还没有看到映射是否可以。我查看了动态映射,但它不是这样工作的。
更新:
我试过插入整数并让 elastic 推断它们的类型,但它将它们解析为类型 'long'。我正在使用 php 插入并确保它们是具有 intval() 函数的整数。
更新:
'properties'实际上是嵌套属性'Networks'的子字段。要存储为 int 的 属性 的名称直到运行时才会知道。
更新:
我尝试在 doc_type 中应用@bittusarkar 推荐的动态映射模板,但它抛出了无法解析映射的异常。
"dynamic_templates" => [
"integers" => [
"match_mapping_type" => "long",
"mapping" => [
"type" => "integer"
]
]
]
使用 Dynamic Templates
:
PUT /my_index
{
"mappings": {
"my_type": {
"dynamic_templates": [
{
"analysed_string_template": {
"match": "*",
"mapping": {
"type": "integer"
}
}
}
]
}
}
}
在 here
学习更多如果这些字段实际上是整数类型,您甚至不需要在映射中显式定义它们。只需拥有一个空映射并开始使用这些字段索引文档。 Elasticsearch 可以推断字段类型并动态更新映射。您所要求的也可以通过动态模板来实现,但在我看来,这太过分了。
既然您希望类型为 integer
而不是默认的 long
,那么 dynamic templates 就是答案。请参阅下面的映射定义。它将检测到类型为 long
的任何字段的类型转换为类型 integer
.
{
"mappings": {
"mapping_name": {
"dynamic_templates": [
{
"convertToInteger": {
"match_mapping_type": "long",
"mapping": {
"type": "integer"
}
}
}
]
}
}
}