【问题标题】:Create Custom mapping type in Elasticsearch 7.3.2 using node js使用节点 js 在 Elasticsearch 7.3.2 中创建自定义映射类型
【发布时间】:2019-09-20 15:09:36
【问题描述】:

当我使用 kibana 进行自定义映射时,它可以正常工作,但是当我在节点程序中做同样的事情时,它会显示映射器解析异常。 原因:根映射定义有不支持的参数:标签(自定义映射名称) 因为在 kibana 中我可以使用 include_type_name =true 但在我的节点程序中它不可用。

        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
            })
        }
    }```

【问题讨论】:

    标签: node.js elasticsearch


    【解决方案1】:

    根据documentation,您需要将 include_type_name 指定为

    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
    })
    

    或者您可以从映射中删除映射名称标签

      mappings: {
                        tags: {  ---> remove
    

    【讨论】:

    • 这没用。
    • 有什么问题?请详细说明
    • 当我在我的打字稿文件中使用 include_type_name 时,它​​显示错误,因为 putmapping 中没有 include_type_name 参数。
    • 您可以删除包含类型名称。映射结构类似于以下映射:{ properties:{}}。如果您提供包含类型名称,那么您需要定义如下映射:{“type_name”:{“properties”:{}}}。类型名称只是为了向后兼容,你不需要在映射或命令中给出它
    猜你喜欢
    • 2020-01-19
    • 1970-01-01
    • 2016-03-30
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 2021-06-28
    • 1970-01-01
    相关资源
    最近更新 更多