Как в Python индексировать и запрашивать данные с помощью Haystack и Elasticsearch

Как в Python индексировать и запрашивать данные с помощью Haystack и Elasticsearch

От автора: Haystack — это библиотека Python, которая обеспечивает модульный поиск для Django. Haystack Python имеет API, который обеспечивает поддержку различных поисковых запросов, таких как Elasticsearch, Whoosh, Xapian и Solr.

Elasticsearch

Elasticsearch — популярная поисковая система Lucene, способная выполнять полнотекстовый поиск, она разработана на Java. В поиске Google используется тот же подход, что и при индексации их данных, и поэтому получить любую информацию с помощью всего нескольких ключевых слов очень легко.

Установите Django Haystack и Elasticsearch

Первый шаг — настройте Elasticsearch и запустить его локально на вашей машине. Elasticsearch требует Java, поэтому на вашем компьютере должен быть установлен Java. Мы собираемся следовать инструкциям с сайта Elasticsearch. Загрузите архив Elasticsearch 1.4.5 следующим образом:

Бесплатный курс «Python. Быстрый старт»

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

Получить курс

Распакуйте его:

Затем он создаст пакет файлов и папок в вашем текущем каталоге. После этого перейдите в каталог bin:

Запустите Elasticsearch.

Чтобы убедиться, что он успешно установлен, перейдите к http://127.0.0.1:9200/, вы должны увидеть что-то вроде этого.

Убедитесь, что у вас также установлен haystack.

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

Эта команда создает файлы, которые предоставляют конфигурации для проектов Django. Давайте создадим приложение для клиентов.

Конфигурации settings.py

Чтобы использовать Elasticsearch для индексации контента, доступного для поиска, нам нужно определить внутренний параметр для haystack в файле проекта settings.py. Мы собираемся использовать Elasticsearch в качестве бэк-енд. HAYSTACK_CONNECTIONS является обязательным параметром и должен выглядеть следующим образом:

В settings.py мы также собираемся добавить haystack и клиентов в список installed apps.

Создание модели

Давайте создадим модель для клиентов. В customers/models.py добавьте следующий код.

Зарегистрируйте модель Customer в admin.py следующим образом:

Создание базы данных и суперпользователя

Примените миграции и создайте учетную запись администратора.

Запустите сервер и перейдите по адресу http://localhost:8000/admin/. Теперь вы сможете увидеть свою модель клиента. Идем дальше и добавляем новых клиентов.

Индексирование данных

Чтобы проиндексировать наши модели, мы начинаем с создания SearchIndex. Объекты SearchIndex определяют, какие данные должны быть помещены в поисковый индекс. Каждый тип модели должен иметь уникальный searchIndex.

Объекты SearchIndex — это то, как haystack определяет, какие данные должны быть помещены в поисковый индекс, и обрабатывает поток данных. Чтобы построить SearchIndex, мы собираемся реализовать наследование от indexes, SearchIndex и indexes.Indexable, определить поля, в которых мы хотим хранить наши данные и определить метод get_model.

Давайте создадим CustomerIndex в соответствии модели Customer. Создайте файл search_indexes.py в каталоге приложения клиентов и добавьте в него следующий код.

Бесплатный курс «Python. Быстрый старт»

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

Получить курс

Поле EdgeNgramField — это haystack SearchIndex, который предотвращает неправильные совпадения, когда части двух разных слов смешиваются друг с другом.

Это позволяет нам использовать функцию autocomplete для проведения запросов. Мы будем использовать автозаполнение, когда начнем запрашивать данные.

document=True указывает основное поле для поиска. Кроме того, поле use_template=True в text позволяет нам использовать шаблон данных для построения документа, который будет проиндексирован.

Давайте создадим шаблон в каталоге шаблонов клиентов. В файле search/indexes/customers/customers_text.txt добавьте следующее:

Переиндексирование данных

Теперь, когда наши данные находятся в базе данных, пришло время поместить их в поисковый индекс. Для этого просто запустите ./manage.py rebuild_index. Вы получите сумму того, сколько моделей было обработано и помещено в индекс.

Кроме того, вы можете использовать RealtimeSignalProcessor, который автоматически обрабатывает обновления / удаления. Чтобы использовать его, добавьте следующее в файл settings.py.

Запрос данных

Мы собираемся использовать шаблон поиска и Haystack API для запроса данных.

Шаблон поиска

Добавьте URL-адреса haystack в URLconf.

Давайте создадим шаблон поиска. В templates/search.html, добавьте следующий код.

Это список page.object_list объектов SearchResult, который позволяет нам получить отдельные объекты модели, например result.first_name. Ваша полная структура проекта должна выглядеть примерно так:

Как в Python индексировать и запрашивать данные с помощью Haystack и Elasticsearch

Теперь запустите сервер, перейдите к 127.0.0.1:8000/search/ и выполните поиск, как показано ниже.

Как в Python индексировать и запрашивать данные с помощью Haystack и Elasticsearch

Поиск по Albert даст результаты всех клиентов с именем Albert. Если ни один клиент не имеет имени Альберт, то запрос даст пустые результаты. Вы можете поэкспериментировать с собственными данными.

Haystack API

Haystack имеет класс SearchQuerySet, предназначенный для упрощения и согласованности поиска и повторения результатов. Большая часть SearchQuerySetAPI знакома из Django ORM QuerySet. В customers/views.py добавьте следующий код:

autocomplete — это ярлык для выполнения автозаполнения поиска. Он должен быть запущен для полей, либо EdgeNgramField, либо NgramField.

В Queryset выше мы используем метод contains для фильтрации поиска, чтобы получить только результаты, которые содержат определенные символы. Например, Al будет только получать информацию о клиентах с именем, содержащим Al. Обратите внимание, что результаты будут получены только из полей, определенных в файле customer_text.txt.

Как в Python индексировать и запрашивать данные с помощью Haystack и Elasticsearch

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

content

contains

exact

gt

gte

lt

lte

in

startswith

endswith

range

fuzzy

Заключение

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

Elasticsearch также широко используется для поиска контента, анализа данных и запросов. Для получения дополнительной информации посетите сайты Haystack и Elasticsearch.

Автор: Esther Vaati

Источник: https://code.tutsplus.com

Редакция: Команда webformyself.

Бесплатный курс «Python. Быстрый старт»

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

Получить курс

Хотите изучить ООП PHP?

Посмотрите видео по объектно-ориентированному программированию на PHP (ООП PHP)!

Смотреть

Метки:

Похожие статьи:

Комментарии Вконтакте:

Комментарии Facebook:

Добавить комментарий