Массовая вставка в индекс ElasticSearch

#node.js #elasticsearch #mongoose #mongoosastic

#node.js #elasticsearch #Мангуст #mongoosastic

Вопрос:

Я использую Mongoosastic плагин mongoose, который может автоматически индексировать ваши модели в elasticsearch.

Требуется считывать данные из файла Excel и загружать данные в MongoDB и одновременно в индекс ElasticSearch.

Все работает отлично, но, когда данные из файла Excel превышают 200, скажем, 300. В MongoDB вставлено всего 300 объектов, но в индекс ElasticSearch вставлено только 200 записей.

Для вставки этих данных я использую функцию Mongoose insertMany, которая по умолчанию запускает кластер elasticsearch, как указано в Mongoosastic.

 var schema = mongoose.Schema({
       question: {
            type: String ,
            required: true,
            text: true,
            index: true,
            es_type:"text",
            es_analyzer: "faq_standard"
        },
        keyword: [{
            type: String ,
            required: false,
            index: true,
            default: [""],
            es_type:"text",es_analyzer: "faq_standard"
        }],
        answer: {
            type: String ,
            required: true,
            text: true,
            es_type:"text", es_analyzer: "faq_standard"
        },
        }
);
schema.plugin(mongoosastic, {
    esClient: getElasticInstance()
});
 

Приведенное выше определение моей модели использовало экземпляр клиента Elasticsearch.

Для вставки данных я использовал функцию insertMany() из Mongoose ODM. Ниже была приведена моя функция с ключевой полезной нагрузкой, которая содержит данные json.

 let err, data;
  [err, data]=await to(Faq.insertMany(payload.content));
  if(err) TE(err, true);
  if(data) return data;
 

Если количество вставляемых данных меньше 200, данные вставляются в индекс ES. Но когда объем данных превышает, только часть этих данных вставлялась почти 200-210.

Я не понимаю, в чем именно проблема, но любая помощь более полезна

Комментарии:

1. docs.mongodb.com/manual/reference/command/isMaster/… проверьте maxWriteBatchSize в db.. insertMany ограничения на основе этого ключа.

2. Но данные вставляются в MongoDB. Пока он не индексируется в индекс ElasticSearch, если объем данных для массовой вставки превышает 300. Это приводит к тому, что 200 документов находятся в кластере ElasticSearch, тогда как 300 документов в MongoDB. Надеюсь, вы поняли мою проблему 🙂

3. Привет.. я искал вашу проблему и обнаружил, что в ElasticSearch нет формулы для вычисления размера массовой индексации, но объем в основном зависит от двух факторов: размера документа и вашего аппаратного ресурса (размер кучи, ОЗУ ..). ). Итак, каков размер 200 синхронизированных документов .. попробуйте использовать разные размеры.. надеюсь, это поможет.. спасибо 🙂