MongoDb Indexing полнотекстовый поиск - PullRequest
0 голосов
/ 16 мая 2018

У меня есть документ с именем "posts", он выглядит так:

{ 
    "_id" : ObjectId("5afc22290c06a67f081fa463"), 
    "title" : "Cool", 
    "description" : "this is amazing" 
}

И я поместил указатель на заголовок и описание:

db.posts.createIndex( { title: "text", description: "text" } )

Проблема в том, что когда я ищу и набираю, например, «amaz», он возвращает данные с «это удивительно» выше, тогда как он должен возвращать данные только тогда, когда я печатаю «удивительный»

 db.posts.find({ $text: { $search: 'amaz' } }, (err, results) => {
     return res.json(results); 
  });

1 Ответ

0 голосов
/ 16 мая 2018

Кредит @amenadiel для исходных данных здесь:

https://stackoverflow.com/a/24316510/7948962

Из документов MongoDB:

https://docs.mongodb.com/manual/core/index-text/

Index Entries

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

Это позволяет вам искать в индексе частичные "стволовые" термины, а база данных возвращает все связанные результаты.В вашем конкретном сценарии amaz является немного странным токеном, поскольку он немного нерегулярен по сравнению с другими словами, такими как talking, который токенизируется на слово talk или talked до talk.Точно так же walking и walked до walk.

В вашем случае слово amazing в вашем тексте будет помечено как amaz.Если ваш столбец содержит такие данные, как amazed, он также получит такой же токен amaz.И эти результаты также будут возвращены из поиска amaz.

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