В настоящее время у меня возникают некоторые проблемы с функцией полнотекстового поиска в MongoDB. В частности, при попытке сопоставить точные фразы.MongoDB полный текстовый поиск - совпадающие слова и точные фразы
Я тестирую функциональность оболочки mongo, но в конечном итоге я буду использовать Spring Data MongoDB с Java.
Так я первый попытался запустить эту команду для поиска слов «задержки», «поздно» и фраза «по времени»
db.mycollection.find({ $text: { $search: "delay late \"on time\"" } }).explain(true);
И в результате объяснить запрос сказал мне:
"parsedTextQuery" : {
"terms" : [
"delay",
"late",
"time"
],
"negatedTerms" : [ ],
"phrases" : [
"on time"
],
"negatedPhrases" : [ ] },
Проблемы здесь в том, что я не хочу искать слово «время», а скорее фраза «вовремя». Я хочу найти задержку и поздно, и в идеале не хочу препятствовать этому.
Я пробовал несколько разных перестановок, например.
db.mycollection.find({ $text: { $search: "delay late \"'on time'\"" } }).explain(true);
db.mycollection.find({ $text: { $search: "delay late \"on\" \"time\"" } }).explain(true);
Но, похоже, не получилось правильных результатов. Я не вижу ничего очевидного в документации об этом.
Для моих целей следует использовать полнотекстовый поиск отдельных слов и функцию поиска регулярных выражений для фраз?
В настоящее время работает с версией MongoDB 2.6.5. Благодарю.
привет спасибо за ваш ответ. Я получаю те же результаты, что и ваш пример, я думаю, что моя путаница по-прежнему связана с третьим запросом примера. В третьем примере я бы ожидал, что этот запрос будет соответствовать третьей и второй записанной вами записи, поскольку второй соответствует «позднему» и «задержке». Я думаю, я не могу понять, если он, похоже, игнорирует другие термины при поиске фразы? – robarthur1
После небольшого поиска у меня создается впечатление, что при поиске фраз он использует логический И, а не ИЛИ, который он использует с отдельными словами. Знаете ли вы способ поиска нескольких слов и фраз с помощью логического ИЛИ без запуска нескольких запросов и фильтрации дубликатов? Благодарю. – robarthur1
Можете ли вы привести мне пример того, что вы хотите? Я думаю, что это будет легче всего понять. Думаю, это должен быть новый вопрос. – wdberkeley