如何将邮递员中的include_type_name设置为true

时间:2019-04-16 05:01:31

标签: node.js firebase elasticsearch postman

我正在邮递员中创建映射索引,并在下面收到错误。 我正在尝试创建一个索引,该索引将使用我创建的index.js函数与我的弹性搜索Firebase服务器通信。可能是什么问题?

这是我的代码

"mappings":{
        "properties":{
                "city":{
                    "type": "text"
                },
                "contact_email":{
                    "type": "text"
                },
                "country":{
                    "type": "text"
                },
                "description":{
                "type": "text"
                },
                "image":{
                "type": "text"
                },
                "post_id":{
                    "type": "text"
                },
                "state_province":{
                    "type": "text"
                },
                "title":{
                    "type": "text"
                }
            }
        }
    }

这是index.js函数的代码

const functions = require('firebase-functions');

const request = require('request-promise')

exports.indexPostsToElastic = functions.database.ref('/posts/{post_id}')
        .onWrite((change,context) =>{
        let postData = change.after.val();
        let post_id = context.params.post_id;

        console.log('Indexing post',postData);

        let elasticSearchConfig = functions.config().elasticsearch;


        let elasticSearchUrl = elasticSearchConfig.url + 'posts/' + post_id;
        let elasticSearchMethod = postData ? 'POST' : 'DELETE';

        let elasticSearchRequest = {
            method:elasticSearchMethod,
                url: elasticSearchUrl,
                auth:{
                    username : elasticSearchConfig.username,
                    password : elasticSearchConfig.password,
                },
                body: postData,
                json : true
              };
              return request(elasticSearchRequest).then(response => {
                  console.log("ElasticSearch response", response);
                  return response;
              });
            });

我在firebase中遇到以下错误

StatusCodeError: 400 - {"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"Rejecting mapping update to [posts] as the final mapping would have more than 1 type: [_doc, -LcajBAxUn3jrq0EHzYa]"}],

这是我在firebase中的数据库示例

-LcajBAxUn3jrq0EHzYa

city:

contact_email:

country:

description:

image:

post_id:

price:

state_province:

title: 

请帮助我确定错误的出处。

2 个答案:

答案 0 :(得分:0)

include_type_name是最近几个版本中引入的elasticsearch标志。请参阅背景here。其目标是解决弹性搜索type != tableName的长期困惑。要在您的请求中包含include_type_name,请参见this

除了firebase / postman以外,这更多是Elasticsearch API问题。

答案 1 :(得分:0)

首先,您需要检查所使用的elasticSearch版本。 如果您使用的版本低于7.0,则必须在“ _doc”字段中输入属性标签。稍后,在高于7.0的elasticSearch版本中,将替换“ _doc”字段。下面是经过修改的映射。

"mappings":{
    "_doc" :{
    "properties":{
            "city":{
                "type": "text"
            },
            "contact_email":{
                "type": "text"
            },
            "country":{
                "type": "text"
            },
            "description":{
            "type": "text"
            },
            "image":{
            "type": "text"
            },
            "post_id":{
                "type": "text"
            },
            "state_province":{
                "type": "text"
            },
            "title":{
                "type": "text"
            }
        }
    }
   }
}