Я ищу реализацию поиска по типу заголовка / автозаполнения для развлечения. У меня есть несколько атрибутов в моей схеме в 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'
в 'to'
, 't'
в s 't'
ackoverflow, указывающий, что запрос что-то достигает. (Я ожидаю, что это будет выглядеть примерно так, когда мы будем искать конкретные «теги» здесь на stackoverflow.com)
Вопрос теперь заключается в том, должен ли я использовать другую схему для индексации или просто придерживаться моей существующей схемы? Кажется, я не буду использовать атрибут «тело», который содержит полную статью и содержит тысячи слов, так как сейчас я не собираюсь выполнять полнотекстовый поиск.
- Атрибуты заголовка, вероятно, имеют в среднем только ~ 45 символов и 3 или 4 слова.
- Категория в основном только 1 слово, в среднем 9-15 символов.
- Предварительный просмотр - это самые большие наборы данных с ~ 150 символами и 20 словами в среднем.
Я бы, вероятно, хотел бы реализовать это с использованием трех структур данных. Вдобавок ко всему, я бы сказал, что один из способов сделать это - заставить AJAX запрашивать каждое нажатие клавиши, которое будет перенаправлено на обработчик node.js, а затем оттуда делать запрос к mongoDB, который будет возвращать каждую запись, содержащую слова, которые имеет букву, которая соответствует нажатию клавиши, введенной пользователем в виде файла JSON. Затем я проанализирую этот файл JSON и покажу каждую запись.
Тогда возникает вопрос, как бы я вписал алгоритм три в свой план? Другое дело, что мне нужно перестраивать индекс каждый раз, когда я выполняю операцию CRUD.
Буду признателен за любые предложения / указатели в правильном направлении или любые статьи, которые помогут мне сделать это. (Я ищу лучший способ / исполнительский способ) Спасибо. Дайте мне знать, если вопрос требует уточнения.