简体   繁体   中英

Create Custom mapping type in Elasticsearch 7.3.2 using node js

When I am doing custom mapping using kibana its working properly but when I am doing the same thing in my node program its showing mapper parsing exception. Reason:Root mapping definition has unsupported parameters:tags(custom mapping name) Because in kibana i am able to use include_type_name =true but in my node program it is not available.

        var name = req.body.templatename;
        var index_patterns = req.body.index_patterns;
        console.log(index_patterns);
        const opts: IndicesPutTemplateParams = {
            name: name,
            body: {
                index_patterns: [index_patterns],
                settings: {
                    analysis: {
                        filter: {
                            autocomplete_filter: {
                                type: "edge_ngram",
                                min_gram: 1,
                                max_gram: 20
                            }
                        },
                        analyzer: {
                            autocomplete: {
                                type: "custom",
                                tokenizer: "standard",
                                filter: [
                                    "lowercase",
                                    "autocomplete_filter"
                                ]
                            }
                        }
                    }
                },
                mappings: {
                    tags: {
                        properties: {
                            name: {
                                type: "text",
                                analyzer: "autocomplete",
                                search_analyzer: "standard"
                            },
                            normalized: {
                                type: "text"
                            },
                            status: {
                                type: "text"
                            },
                            createdat: {
                                type: "date"
                            },
                            updatedat: {
                                type: "date"
                            }
                        }
                    }
                }

            }
        }
        try {
            esClient.indices.putTemplate(opts).then((data: any) => {
               return res.json({
                   data
               });
                console.log(data);
              }).catch((err: any) => {
                console.log(err);
                res.status(500).json({
                    err
                })
            });     
        } catch (error) {
            res.status(500).json({
                error
            })
        }
    }```

As Per documentation you need to give include_type_name as

client.indices.putTemplate({
  name: string,
  include_type_name: boolean,  ---> 
  order: number,
  create: boolean,
  timeout: string,
  master_timeout: string,
  flat_settings: boolean,
  body: object                -> mapping object
})

Or you can drop mapping name tags from mapping

  mappings: {
                    tags: {  ---> remove

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM