Проблема с точным текстовым поиском Word в MongoDB - PullRequest
1 голос
/ 28 апреля 2019

Я хочу запросить текстовую запись в mongodb (3.6), используя этот код:

collection.aggregate([{$match:{$text:{$search: "gram"}}}])

в этом запросе, результаты будут выглядеть так:

[{content:"Telegram is a messaging ...",tags:"Telegram"}, 
{content:"Instagram is a social ..." tags:"Instagram"}, 
{content:"gram is a unit of weight", tags:"gram"},
{content:"Mobogram is a shell for telegram", tags:"Mobogram"}]

, ножелаемый результат:

{ontent: "gram is a unit of weight",tags:"gram"}

, что означает, что мы ищем точные совпадения.Как бы изменить запрос, чтобы получить точные совпадения?

Редактировать:

Индекс:

weights:{contents:1, tags:1}
default_language:english
language_override:language

, который был создан с этим:

collection.createIndex( { "content": 1, "tags": 1 } )

1 Ответ

0 голосов
/ 28 апреля 2019

Синтаксис для конкретной фразы:

   { $text: { $search: '\"gram is a unit of weight\"' } }

К сожалению, поиск точного совпадения по слову на самом деле невозможен, это связано с использованием Монго снежного кома в качестве основыи индексные слова.

вы можете, однако, попытаться сопоставить определенную мета-оценку в текстовых поисках выше.

Пример:

Предположим, у нас есть 2 документа с текстовым полем,один раз со словом сон, а другой со словом сон.При создании текстового индекса монго сохраняет термин «сон» для обоих слов.Таким образом, как только я продолжу искать термин sleep, даже если я добавлю синтаксис точного соответствия, оба вернутся как совпадения из-за характера индексации.

забавный совет, чтобы понять, как монго анализирует определенные слова для запуска:

model.find({$text: {$search: 'sleeping'}}).explain()

это вернет JSON в объекте WinningPlan:

{
  "terms": [
    "sleep"
  ],
  "negatedTerms": [],
  "phrases": [],
  "negatedPhrases": []
}

Теперь легко понять, какие термины будут соответствовать этому поиску.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...