2015-04-09 2 views
2

полнотекстового Я пытаюсь использовать текстовый индекс в MongoDB: {$text: {$search: 'sport hockey'}}MongoDb поиск и состояние

Является ли использование или условие для поиска по фразе: «спорт» или «хоккей». Например, результат может быть следующий список названий:

  • Спорт что-то сегодня ...
  • Спорт хоккей
  • Хоккеисты

Наиболее соответствующий документ находится на второй позиции (на самом деле я хотел бы исключить все другие результаты, кроме этого: «Спорт - хоккей»). Можно ли использовать условие AND в текстовом формате?

Котировочные знаки не подходят, потому что {$text: {$search: "\"sport hockey\""}} использует поиск по точному совпадению.

ответ

1

Текстовый поиск не предоставляет этот готовый вариант. Но есть два возможных решения.

  1. Используйте раствор до 2.6 для поиска текста: Разделите текстовое поле на отдельные слова и безопасные отдельные слова как массив в одних и тех же документах. Затем вы можете выполнить запрос $all в этом массиве.

  2. Выполнение отдельных текстовых запросов для каждого слова и создание набора пересечений на прикладном уровне.

2

попытаться включить textScore в свой вывод, а затем отсортировать его, чтобы получить наиболее релевантные документы (необязательно использовать предел для получения соответствующих документов).

db.your_collection.find(
    { 
    $text: { $search: "sport hockey" } 
    }, { 
    score: { $meta: "textScore" } 
    } 
).sort(
    { 
    score: { $meta: "textScore" } 
    } 
).limit(2) 
Смежные вопросы