Mongoosasti c отображение / добавление документов проблема - PullRequest
0 голосов
/ 10 февраля 2020

Я использую node.js + mon go .db + mongosasti c 4.5.1 + elasti c 7.4.1. Проблема в том, что когда mongosasti c создает индекс (я думаю, он создается автоматически, даже если я отправляю запрос на localhost: 9200 / tenders / tender / 123123

{
    "id":123123,
    "nameRu":"test"
}

Mongoosasti c создает документ Кстати, используя этот URL, а не / tenders / _doc / 123123. Если я создаю отображение по требованию, я получаю сообщение об ошибке

"type":"illegal_argument_exception","reason":"Rejecting mapping update to [tenders] as the final mapping would have more than 1 type: [_doc, tender]"}

В elasti c 7+ создание типа было удалено. Поэтому моя задача чтобы создать отображение с типом /tenders/tender/blablabla или чтобы Mongoosasti c использовал _doc вместо tender.

Функция отображения

const mongoose = require('mongoose');
const mongoosastic = require('mongoosastic');


mongoose.connect('mongodb://localhost/zakupki2', {useNewUrlParser: true});

const tSchema = require('./Schema/Tenders');
const TenderSchema = new mongoose.Schema(tSchema);
TenderSchema.plugin(mongoosastic, {
    "host": "localhost",
    "port": 9200
});

var Tender = mongoose.model('tender', TenderSchema);

Tender.remove({}, function(err) {
    console.log('collection removed')
    createMapping()
    //makeRequest();
});


function createMapping()
{
    Tender.createMapping(
        {
            "settings": {
                "analysis": {
                    "filter": {
                        "russian_stop": {
                            "type": "stop",
                            "stopwords": "_russian_"
                        },
                        "russian_keywords": {
                            "type": "keyword_marker",
                            "keywords": [
                                "закупка",
                                "тендер",
                                "услуги",
                                "приобритение",
                                "аренда"
                            ]
                        },
                        "russian_stemmer": {
                            "type": "stemmer",
                            "language": "russian"
                        }
                    },
                    "analyzer": {
                        "rebuilt_russian": {
                            "tokenizer": "standard",
                            "filter": [
                                "lowercase",
                                "russian_stop",
                                "russian_keywords",
                                "russian_stemmer"
                            ]
                        }
                    }
                }
            },
            "mappings": {
                "properties": {
                    "id": {
                        "type": "long"
                    },
                    "nameRu": {
                        "type": "text",
                        "analyzer": "rebuilt_russian",
                        "fields": {
                            "exact": {
                                "type": "text",
                                "analyzer": "rebuilt_russian"
                            }
                        }
                    }
                }
            }

        },

        (err, mapping) =>
        {


            console.log('err',err);
            console.log('mapping',mapping);

            makeRequest();
        });
}

Схема

const mongoose = require('mongoose');
module.exports = {

    id: { type: Number, default: null, es_indexed:true},
    numberAnno: { type: String, default: null},
    nameRu: {type: String, es_indexed:true, es_boost:2.0, es_search_analyzer:"rebuilt_russian", es_analyzer: "rebuilt_russian"},
}
...