我将有一个包含多个字段的文档。让我们说'title','meta1','meta2','full_body'。
他们每个人我想以几种不同的方式进行索引(原始的,干净的,没有停止词,带状疱疹,同义词等)。因此我会有以下字段:title.stemming
,title.shingles
,meta1.stemming
,meta1.shingles
等。
我是否必须复制粘贴每个字段的映射定义?或者是否可以创建所有索引/分析方法的一个定义,然后仅将其应用于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?
答案 0 :(得分:1)
在您的情况下,您可以将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
设置来限制到特定字段名称的映射。