我有一个包含多种类型的索引,以及新类型'创造不受我的控制。我知道数据结构非常可靠,但我事先并不知道类型的名称。
我想将一些字段设置为not_analysed,而有些字段应该进行分析。有没有办法实现这个目标?
答案 0 :(得分:2)
我还要添加Val的优秀答案,您可能希望将这些动态模板添加到索引的_default_
映射中,因为您提到您事先并不知道这些类型。例如:
PUT /my_index/_mapping/_default_
{
"dynamic_templates": [
{
"analyzed": {
"match_mapping_type": "string",
"match": "*_text",
"mapping": {
"type": "string"
}
}
},
{
"not_analyzed": {
"match_mapping_type": "string",
"match": "*_key",
"mapping": {
"type": "string",
"index": "not_analyzed"
}
}
}
]
}
有了这个,您可以向索引添加任意类型,并将文档中的任何字段添加到以#34; _text"结尾的新类型中。将被分析。任何以" _key"结尾的字段;不会被分析。您可以阅读有关default mapping in the docs。
的更多信息答案 1 :(得分:1)
Dynamic mappings是要走的路。由于您提到analyzed
vs not_analyzed
,我估计您在谈论string
字段。
我们的想法是更新索引和映射,以便为字符串字段包含动态模板:
PUT my_index
{
"mappings": {
"my_type": {
"dynamic_templates": [ <--- include this section in your existing mapping
{
"analyzed": {
"match_mapping_type": "string",
"match": "field1",
"mapping": {
"type": "string"
}
}
},
{
"not_analyzed": {
"match_mapping_type": "string",
"match": "field2",
"mapping": {
"type": "string",
"index": "not_analyzed"
}
}
}
]
}
}
}
另一种方法是将每个新字符串字段设为analyzed
和not_analyzed
,这样您就不必枚举所有字段,只需使用:
PUT my_index
{
"mappings": {
"my_type": {
"dynamic_templates": [ <--- include this section in your existing mapping
{
"strings": {
"match_mapping_type": "string", <-- match all string fields
"mapping": {
"type": "string",
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed",
"ignore_above": 256
}
}
}
}
}
]
}
}
}