От платформ электронной коммерции до систем управления контентом (CMS) веб-приложения генерируют и обрабатывают огромные объемы данных. Эффективное извлечение соответствующей информации из этих данных имеет решающее значение для бесперебойного взаимодействия с пользователем. Таким образом, традиционных функций поиска, использующих буквальное, дословное сопоставление запросов, недостаточно. Вам нужен полнотекстовый поиск.

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

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

В этом руководстве показано, как интегрировать Meilisearch в веб-проект Node.js.

Что такое Мейлисеарх?

Meilisearch — это поисковая система с открытым исходным кодом, которая предоставляет конечным пользователям быстрые и релевантные результаты поиска. Он устойчив к опечаткам и работает «из коробки» с настройками по умолчанию, что подходит для большинства проектов.

Meilisearch также обладает широкими возможностями настройки и предлагает множество функций для настройки релевантности результатов поиска. Среди этих функций наиболее примечательными являются правила ранжирования, которые вы можете адаптировать к своему проекту.

Он предлагает интуитивно понятный RESTful API для плавной интеграции практически с любым бизнес-сайтом. Вы можете разместить его самостоятельно или использовать официальное облачное решение Meilisearch Cloud, чтобы быстро и легко начать работу. В этом руководстве используется Meilisearch Cloud.

Предварительные условия

Чтобы следовать дальше, вам нужно:

  • Node.js установлен на вашем компьютере
  • Проект Node.js. Вы можете использовать этот стартовый проект с GitHub.

Как настроить Meilisearch

  1. Перейдите в Meilisearch Cloud и либо создайте учетную запись, либо войдите в систему. Обязательно подтвердите свой адрес электронной почты.
  2. Далее нажмите Создать проектсервер, на котором работает экземпляр Meilisearch, куда вы добавите наборы данных своего веб-сайта.
  3. Добавить Название проекта (например, приложение-книга) и выберите предпочитаемый регион. Затем нажмите Создавать. После создания проекта вы можете нажать Настройки чтобы просмотреть подробную информацию о вашем проекте, например URL-адрес для доступа к наборам данных, ключи API для защиты вашего экземпляра Meilisearch и другую информацию.
    Страница обзора проекта приложения-книги.

    Существует три ключа API, каждый из которых представляет разный уровень авторизации:

    • Мастер ключ — Этот ключ разблокирует все маршруты и является единственным, имеющим доступ к конечным точкам для создания и удаления ключей API. Используйте главный ключ только для управления ключами API из защищенной среды.
    • Ключ API поиска по умолчанию — Этот ключ предоставляет доступ только к маршруту поиска. Вы можете использовать его в клиентском коде.
    • Ключ API администратора по умолчанию — Этот ключ имеет доступ ко всем маршрутам API, кроме /keys, предназначенный для создания и удаления ключей API. Вы можете использовать этот ключ только из защищенной среды.

Как индексировать данные с помощью Meilisearch

Индексы — это основные компоненты, которые хранят и организуют данные, доступные для поиска. Они действуют как контейнеры для документов — объектов, содержащих одно или несколько полей.

Каждый индекс в Meilisearch независим и настраиваем, что позволяет использовать индивидуальные правила ранжирования при поиске и параметры фильтрации.

Как создать индекс и добавить документы

  1. На панели навигации нажмите кнопку Индексы вкладка в вашем проекте.
  2. Нажмите Создать индекс. Затем введите имя индекса (например, книги) и нажмите Создать индекс.
  3. Выберите, как вы хотите импортировать документы. Для этого руководства импортируйте файл JSON, который включает 13 записей книг из API Google Book.
  4. Нажмите Файл загружен и загрузите файл JSON, затем нажмите Импортировать документы.

Как обновить и удалить документы

В настоящее время в Meilisearch Cloud нет возможности изменять или удалять документы, но вы можете использовать маршруты REST API или SDK. Код ниже демонстрирует, как обновлять или удалять документы с помощью конечных точек REST API. В этом руководстве для работы с маршрутами используется cURL, но вы также можете использовать платформу API, например Postman.

  1. Для обновления документов отправьте PUT запрос по следующему маршруту:
    /indexes/{index_uid}/documents

    index_uid выше указано индексное имя вашего проекта:

    Выделенное имя индекса
    Выделенное имя индекса.

  2. С помощью этого маршрута вы можете добавить или обновить список документов, если они уже существуют. Чтобы обновить документ, необходимо прикрепить его первичный ключ. Старый документ подвергается частичному обновлению на основе полей нового документа. Обновление сохраняет все поля, не включенные в новый документ, позволяя им оставаться неизменными. Ниже приведен пример того, как обновить заголовок документа в указателе книги с JavaScript для детей к Программирование JavaScript для детей и добавьте поле издателя:
    curl \
        -X PUT '/indexes/books/documents' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: Bearer ' \
            --data-binary '[
            {
                "id": "71nDBQAAQBAJ",
                "title": "JavaScript Coding for Kids",
                "publisher": "No Starch Press"
            }
        ]'
  3. Заменять <your-project-url> и <your-admin-api-key> с соответствующими значениями в вашем Обзор проекта страница:
    "taskUid": 26, "indexUid": "books", "status": "enqueued", "type": "documentAdditionOrUpdate", "equeuedAt": "2023-05-26T07:52:24.127920065Z"
  4. Для удаления документов Meilisearch предлагает три маршрута (конечные точки):
    /indexes/{index_uid}/documents // Deleting all documents
    /indexes/{index_uid}/documents/{document_id} // Deleting a single document
    /indexes/{index_uid}/documents/delete-batch // Deleting a selection of  
    documents

    Вы можете получить document_id из исходных данных из книги.json файл после получения документа из MeiliSearch Cloud или вашей базы данных.

Ниже приведен пример того, как удалить книгу, которую вы обновили выше:

curl \
    -H 'Authorization: Bearer ' \
    -X DELETE '/indexes/books/documents/71nDBQAAQBAJ'

После отправки запроса ваш ответ должен выглядеть следующим образом:

"taskUid": 10, "indexUid": "books", "status": "enqueued", "type": "documentDeletion", "equeuedAt": "2023-05-26T07:20:11.1291066"

Как добавить MeiliSearch в веб-сервис

  1. Начните с клонирования стартового проекта из GitHub, выполнив в терминале следующие команды:
    git clone https://github.com/Tammibriggs/meilisearch-app.git
    cd meilisearch​-app
    npm install

    Если вы проверите пакет.json файл, вы должны увидеть команду запуска. Бегать npm start для запуска проекта Node.js на локальном хосте port3000. Когда вы вводите http://localhost:3000/ в своем браузере, вы должны увидеть следующее:

    Стартовое демо-приложение Meilisearch
    Стартовое демонстрационное приложение Meilisearch.

  2. После запуска приложения вы можете добавить в него Meilisearch, чтобы форма поиска начала возвращать результаты Meilisearch при отправке. Для этого установите Meilisearch, выполнив в терминале следующую команду:
    npm install meilisearch
  3. Вам также необходимо установить пакет dotenv npm для загрузки конфиденциальных учетных данных из .env файл. Запустите следующую команду в терминале:
    npm install dotenv
  4. Создать .env файл в корневой папке проекта и добавьте следующее:
    YOUR_PROJECT_URL= '<your-project-url>'
    YOUR_SEARCH_API_KEY= '<your-admin-api-key>'

    Обязательно замените <your-project-url> и <your-admin-api-key> с соответствующими им значениями.

  5. Далее импортируйте meilisearch и dotenv пакет в сервер.js файл и настроить dotenv:
    import {MeiliSearch} from 'meilisearch'
    import dotenv from 'dotenv';
    dotenv.config();
  6. Затем инициализируйте Meilisearch, чтобы вы могли начать работу над своим книги-приложение проект. Перейдите к сервер.js файл и добавьте следующий код после searchValue определение переменной:
    const client = new MeiliSearch({ host: process.env.YOUR_PROJECT_URL, apiKey: process.env.YOUR_SEARCH_API_KEY })
  7. Одной из важных функций является поиск по указателю книг в Meilisearch с использованием значения поиска, прикрепленного к URL-адресу при отправке формы. Чтобы включить эту функцию, добавьте следующий код после client определение переменной:
    const index = client.index('books')  
    const searchResults = !!searchValue && await index.search(searchValue)

    Этот код создает ссылку на индекс книги. Затем он использует search() метод для поиска документов, соответствующих значению поиска в индексе книги, если вы определяете searchValue.

  8. Наконец, чтобы отобразить результаты поиска, измените render() метод следующим образом:
    res.render('index', {
        books: searchResults ? searchResults.hits : [],
        searchValue
    })

    Теперь вы готовы начать поиск по указателю книги:

    Поиск по указателю «книги» с помощью формы поиска.
    Поиск по указателю «книги» с помощью формы поиска.

  9. После добавления вышеуказанных кодов ваш сервер.js файл должен выглядеть так:
    import express from 'express';
    import { MeiliSearch } from 'meilisearch';
    import dotenv from 'dotenv';
    dotenv.config();
    
    const app = express();
    const PORT = process.env.PORT || 3000;
    
    app.set('view engine', 'ejs');
    app.use(express.static('public'));
    
    app.get('/', async (req, res) => {
    	const searchValue = req.query.search;
    	const client = new MeiliSearch({
    		host: process.env.YOUR_PROJECT_URL,
    		apiKey: process.env.YOUR_SEARCH_API_KEY,
    	});
    	const index = client.index('books');
    	const searchResults = !!searchValue && (await index.search(searchValue));
    
    	res.render('index', {
    		books: searchResults ? searchResults.hits : [],
    		searchValue,
    	});
    });
    
    app.listen(PORT, () => {
    	console.log(`listening at http://localhost:${PORT}`);
    });

Вы можете получить доступ к полному коду этого руководства на GitHub.

Краткое содержание

Meilisearch — отличное решение для поисковой системы, которое расширяет возможности поиска веб-сайта и повышает удобство работы пользователей. Его исключительная скорость, алгоритм ранжирования, ориентированный на релевантность, и простой процесс интеграции делают его бесценным инструментом, если вы хотите оптимизировать функции поиска на своем веб-сайте.

Служба хостинга приложений Kinsta плавно повышает производительность приложений на базе Meilisearch. Благодаря надежной инфраструктуре и оптимизированной серверной среде Kinsta обеспечивает функцию быстрого поиска, повышая удобство работы пользователей. Масштабируемость платформы соответствует требованиям Meilisearch, гарантируя надежные и эффективные поисковые операции.

Какой поисковой системе вы доверяете в своих проектах? Дайте нам знать в разделе комментариев!