Решение MongoDB + Node.js + AJAX для выполнение поиска с автозаполнением

Я хочу реализовать поиск с опережением ввода / автозаполнением для развлечения. У меня есть несколько атрибутов в моей схеме в mongoDB, но я хочу иметь возможность выполнять поиск только по категории, заголовку, предварительному просмотру или дате .

Это моя схема mongoDB для одной статьи (я использую mongoose в качестве ORM):

{
    title: { type: String, required: true}
    , preview: { type: String, required: true}
    , body: { type: String, required: true}
    , category: {type: String}
    , created_at: { type: Date, default: Date.now }
}

Каждый раз, когда я создаю, обновляю или уничтожаю, мне приходится повторно индексировать, чтобы поиск обновлялся. Электронный поиск будет выполняться автоматически, так что, например, если у меня есть две статьи с заголовками «Добро пожаловать в stackoverflow» и «Как избежать stackoverflow» соответственно, и пользователь вводит ключ 't' , тогда я бы отображать обе статьи с использованием AJAX, поскольку в названиях обеих есть символ 't' .я также хотел бы выделить каждое 't' ; переполнение 't' в 'на' , 't' в s 't' , указывающее, что запрос что-то попадает. (Я ожидаю, что это будет похоже на то, когда мы ищем определенные «теги» здесь, на stackoverflow.com)

Теперь вопрос в том, следует ли мне использовать другую схему для индексации или просто придерживаться моей существующей схемы? Похоже, я не буду использовать атрибут body, который содержит всю статью и тысячи слов, так как я не собираюсь выполнять полнотекстовый поиск прямо сейчас.

  • Атрибуты заголовка, вероятно, содержат в среднем всего ~ 45 символов и 3 или 4 слова.
  • Категория обычно всего 1 слово, в среднем 9-15 символов.
  • Предварительный просмотр будет представлять собой самые большие наборы данных, содержащие в среднем ~ 150 символов и 20 слов.

Я, наверное, хотел бы реализовать это, используя trie-структуры данных. В верхней части головы я бы, вероятно, сказал, что один из способов сделать это - сделать запрос AJAX для каждого нажатия клавиши, который будет перенаправлен на обработчик node.js, а затем оттуда запросить mongoDB, который вернет каждую запись, содержащую слова, которые имеет букву, которая соответствует нажатию клавиши, введенной пользователем в виде файла JSON. Затем я проанализирую этот файл JSON и покажу каждую запись.

Тогда возникает вопрос, как я смогу вписать алгоритм trie в свой план? Другое дело, что мне нужно перестраивать индекс каждый раз, когда я выполняю операцию CRUD.

Буду признателен за любые предложения / указатели в правильном направлении или любые статьи, которые помогут мне в этом. (Я ищу лучший способ / эффективный способ) Спасибо.Сообщите мне, если нужно уточнить вопрос.

8
задан Benny Tjia 28 January 2012 в 00:51
поделиться