Задать вопрос
@DarkLynx91

Как организовать индекс ElasticSearch mongoosastic?

Добрый день.
Никак не могу разобраться что я делаю не так.
Есть схема
var ResponseSchema = new Schema({
    date_create: {type: Date, default: Date.now},
    author: {type: Schema.Types.ObjectId, ref: 'user', required: true},
    text: {type: String, required: true, es_indexed: true, es_index_analyzer: "index_ru", es_search_analyzer: "search_ru"},
    type: {type: String, default: 'response'},
    type_status: String,
    files: [{type: Schema.Types.ObjectId, ref: 'file'}],
    task: {type: Schema.Types.ObjectId, ref: 'task'}
});

var TicketSchema = new Schema({
    date_create: {type: Date, default: Date.now},
    date_update: Date,
    author: {type: Schema.Types.ObjectId, ref: 'user', required: true},
    project: {type: Schema.Types.ObjectId, ref: 'project', required: true},
    name: {type: String, required: true, es_indexed: true, es_index_analyzer: "index_ru", es_search_analyzer: "search_ru"},
    text: {type: String, required: true, es_indexed: true, es_index_analyzer: "index_ru", es_search_analyzer: "search_ru"},
    status: {type: String, default: 'wait_staff'},
    labor: {type: Boolean, default: false},
    files: [{type: Schema.Types.ObjectId, ref: 'file'}],
    responses: {type: [ResponseSchema]}
});

TicketSchema.plugin(mongoosastic);

var Ticket = mongoose.model('ticket', TicketSchema);
Ticket.createMapping({}, function(err, mapping){
    if (err) {
        console.log(err);
    } else {
        console.log(mapping);
    }
});


В итоге я хочу получить индекс по которому будет поиск по полям name, text схемы TicketSchema и по полю text схемы ResponseSchema которая внутри схемы TicketSchema представлена массивом вложенных схем ResponseSchemа (ну по коду видно).

Если выбросить ResponseSchema из индекса то всё работает замечательно, в индекс попадают поля name и text схемы TicketSchema, морфология русская работает - всё супер. А вот добавить еще поиск по ResponseSchema, так же с учетом морфологии не получается.

Если прописать у поля responses в TicketSchema es_type: "nested" то объекты схемы ResponseSchema попадают в индекс, при каком то раскладе (уже не помню как, много эксперементирую) мне даже удалось искать по полю text ResponseSchema и получать объекты TicketSchema, но без учета морфологии..

Вопрос, где и что я делаю не так...
  • Вопрос задан
  • 339 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
dizballanze
@dizballanze
Software developer at Yandex
Я бы вам посоветовал повесить хуки на модели и вручную отдельно делать индексацию при помощи ES клиента, так больше контроля над процессом.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы