elasticsearch:多个字段的多字段映射
elasticsearch: multifield mapping of multiple fields
我将有一个包含多个字段的文档。假设 'title'、'meta1'、'meta2'、'full_body'。
我想以几种不同的方式对它们中的每一个进行索引(原始的,没有停用词的词干提取,带状疱疹,同义词等)。因此我会有这样的字段:title.stemming
、title.shingles
、meta1.stemming
、meta1.shingles
等
我是否必须为每个字段复制粘贴映射定义?或者是否可以为 indexing/analysing 的所有方式创建一个定义,然后仅将其应用于 4 个顶级字段中的每一个?如果可以,怎么做?
mappings:
my_type:
properties:
title:
type: string
fields:
shingles:
type: string
analyzer: my_shingle_analyzer
stemming:
type: string
analyzer: my_stemming_analyzer
meta1:
... <-- do i have to repeat everything here?
meta2:
... <-- and here?
full_body:
... <-- and here?
在您的情况下,您可以将 dynamic templates 与 match_mapping_type
设置一起使用,这样您就可以将相同的设置应用于所有字符串字段:
{
"mappings": {
"my_type": {
"dynamic_templates": [
{
"strings": {
"match_mapping_type": "string",
"mapping": {
"type": "string",
"fields": {
"shingles": {
"type": "string",
"analyzer": "my_shingle_analyzer"
},
"stemming": {
"type": "string",
"analyzer": "my_stemming_analyzer"
}
, ... other sub-fields and analyzers
}
}
}
}
]
}
}
}
因此,每当您索引字符串字段时,都会根据定义的模板创建其映射。您还可以使用 match
设置来限制映射到特定的字段名称。
我将有一个包含多个字段的文档。假设 'title'、'meta1'、'meta2'、'full_body'。
我想以几种不同的方式对它们中的每一个进行索引(原始的,没有停用词的词干提取,带状疱疹,同义词等)。因此我会有这样的字段:title.stemming
、title.shingles
、meta1.stemming
、meta1.shingles
等
我是否必须为每个字段复制粘贴映射定义?或者是否可以为 indexing/analysing 的所有方式创建一个定义,然后仅将其应用于 4 个顶级字段中的每一个?如果可以,怎么做?
mappings:
my_type:
properties:
title:
type: string
fields:
shingles:
type: string
analyzer: my_shingle_analyzer
stemming:
type: string
analyzer: my_stemming_analyzer
meta1:
... <-- do i have to repeat everything here?
meta2:
... <-- and here?
full_body:
... <-- and here?
在您的情况下,您可以将 dynamic templates 与 match_mapping_type
设置一起使用,这样您就可以将相同的设置应用于所有字符串字段:
{
"mappings": {
"my_type": {
"dynamic_templates": [
{
"strings": {
"match_mapping_type": "string",
"mapping": {
"type": "string",
"fields": {
"shingles": {
"type": "string",
"analyzer": "my_shingle_analyzer"
},
"stemming": {
"type": "string",
"analyzer": "my_stemming_analyzer"
}
, ... other sub-fields and analyzers
}
}
}
}
]
}
}
}
因此,每当您索引字符串字段时,都会根据定义的模板创建其映射。您还可以使用 match
设置来限制映射到特定的字段名称。