#node.js #firebase #elasticsearch #postman
# #node.js #firebase #elasticsearch #postman
Вопрос:
Я создаю индекс сопоставления в postman и получаю сообщение об ошибке, приведенное ниже. Я пытаюсь создать индекс, который будет взаимодействовать с моим сервером firebase elastic search, используя созданную мной функцию index.js . В чем может быть проблема?
Вот мой код
"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:
Пожалуйста, помогите мне определить, где может быть моя ошибка.
Комментарии:
1. Можете ли вы предоставить более подробную информацию здесь? Является ли это частью тела запроса? Что такое код сервера? Чего именно вы пытаетесь достичь? Пожалуйста, предоставьте больше контекста, чтобы другие люди могли понять вашу проблему и помочь вам.
2. вы нашли какое-либо решение для этого?
Ответ №1:
include_type_name
это флаг elasticsearch, введенный в последние несколько выпусков. Смотрите предысторию здесь. Его цель — устранить давнюю путаницу в elasticsearch type != tableName
. Чтобы включить include_type_name
это в свои запросы, см. Это.
Это скорее проблема API Elasticsearch, отличная от firebase / postman.
Ответ №2:
Сначала вам нужно проверить версию elasticSearch, которую вы используете. Если вы используете версию меньше 7.0, вам необходимо ввести свой тег свойств в поле «_doc». Поле «_doc» позже заменяется в версиях elasticSearch выше 7.0 . Ниже приведено исправленное отображение.
"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"
}
}
}
}
}