@darktowerk56c

Почему не работает полнотекстовый поиск в MongoDB по нескольким полям?

Всем привет. Подскажите, пожалуйста, почему не работает полнотекстовый поиск в MongoDB по нескольким полям? Где я ошибся в коде?

У меня есть три документа.
{
    "_id": {
        "$oid": "5d7f70d46b647c1a74d9b8aa"
    },
    "firstName": "user",
    "lastName": "one",
    "phoneNumber": "+7 (111) 111-11-11",
    "city": "Москва",
    "userId": {
        "$oid": "5d5ea4596886b1107c2be849"
    },
    "__v": 0
}


{
    "_id": {
        "$oid": "5d7f70d46b647c1a74d9b8aa"
    },
    "firstName": "user",
    "lastName": "two",
    "phoneNumber": "+7 (222) 222-22-22",
    "city": "Сочи",
    "userId": {
        "$oid": "5d5ea4596886b1107c2be849"
    },
    "__v": 0
}


{
    "_id": {
        "$oid": "5d7f70d46b647c1a74d9b8aa"
    },
    "firstName": "user",
    "lastName": "two",
    "phoneNumber": "+7 (333) 333-33-33",
    "city": "Москва",
    "userId": {
        "$oid": "5d5ea4596886b1107c2be849"
    },
    "__v": 0
}

На вход у меня приходит, например такая строка:
'ne чи'
Ожидается результат поиска по всем документам и следующим полям в этих документах:
firstName
lastName
city

Результат:
{
    "_id": {
        "$oid": "5d7f70d46b647c1a74d9b8aa"
    },
    "firstName": "user",
    "lastName": "one",
    "phoneNumber": "+7 (111) 111-11-11",
    "city": "Москва",
    "userId": {
        "$oid": "5d5ea4596886b1107c2be849"
    },
    "__v": 0
}


{
    "_id": {
        "$oid": "5d7f70d46b647c1a74d9b8aa"
    },
    "firstName": "user",
    "lastName": "two",
    "phoneNumber": "+7 (222) 222-22-22",
    "city": "Сочи",
    "userId": {
        "$oid": "5d5ea4596886b1107c2be849"
    },
    "__v": 0
}

Модель выглядит следующим образом:
const mongoose = require('mongoose')

const bookSchema = new mongoose.Schema(
  {
    firstName: {
      type: String,
      required: true
    },
    lastName: {
      type: String,
      required: true
    },
    city: {
      type: String,
      required: true
    },
    phoneNumber: {
      type: String,
      required: true
    },
    userId: {
      type: mongoose.Schema.Types.ObjectId,
      ref: 'User'
    }
  }
)

// Define our indexes
bookSchema.index({
  firstName: 'text',
  lastName: 'text',
  city: 'text'
})

module.exports = mongoose.model('Book', bookSchema)

контроллер:
exports.searchBook = async (req, res, next) => {

  const term = 'ne чи'
  console.log(term)

  const books = await Book.find({
    $text: {
      $search: term
    }
  }, {
    score: { $meta: 'textScore' }
  })
  .sort({
    score: { $meta: 'textScore' }
  })

  console.log('books', books)
}

В результате приходит пустой массив. Если даже передать, например: 'Сочи', то так же вернется пустая строка.
Что я делаю не так.
Источник на который я ссылался?
https://stackoverflow.com/questions/24714166/full-...
  • Вопрос задан
  • 39 просмотров
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
жизнь прекрасна в Амстердаме, а в Воронеже gаvно
по одному полю ок?
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы