Задать вопрос
maxxannik
@maxxannik
Сайты на WordPress + Интернет магазины WooCommerce

Как сделать поиск в WordPress посредством ElasticSearch с учетом контроля доступа?

Нужно реализовать хитрый поиск по сайту на базе WordPress.
Условия задачи:
1. Сайт закрытый, читать его могут только зарегистрированные пользователи. Пользователей около 300 человек.
2. Часть постов имеют ограничение доступа по списку пользователей и групп. Через наш плагин ACL, где ИД пользователей и групп которым разрешен доступ хранится в метаполе.
3. В постах есть ссылки на Google Документы и Таблицы.

Нужно:
1. Реализовать поиск через ElasticSearch
2. С морфологией и синонимами слов
3. С учетом контроля доступа (пользователю нельзя показывать посты, к которым нет доступа)
4. Также желательно индексировать документы PDF + Google Документы (они вставлены как ссылки).

Как настроить ElasticSearch - понятно.

Отсюда два вопроса:
1. Можно ли настроить поиск с учетом списков доступа? Если да то как?
2. Можно ли реализовать индексацию текстов документов, которые размещены в постах как ссылки?

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

Буду благодарен за любые мысли, советы и подсказки.
  • Вопрос задан
  • 577 просмотров
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
MintTea
@MintTea
1) Вы можете сохранять ACL лист для каждого документа в самом документе, и затем подставлять ID текущего пользователя в фильтр term по этому полю в каждый запрос. По сути, ничем не отличается от принципов, по которым это реализуется в рсубд.

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

Войдите, чтобы написать ответ

Похожие вопросы