Используя elasti c, ищите панель управления пользовательского интерфейса за прокси - PullRequest
0 голосов
/ 26 марта 2020

Я работаю над поисковой панелью с возможностями полнотекстового поиска, поддерживаемой ES. Поиск будет первоначально потребляться приборной панелью пользовательского интерфейса. Я планирую создать прикладной уровень API веб-службы (WS) между панелью мониторинга пользовательского интерфейса и ES, который будет направлять бизнес-поиск в ES.

В будущем может быть несколько клиентов для WS, каждый со своим бизнесом. варианты использования и сложные требования к данным (в основном поля ответа). В них много сущностей и огромное количество полей. Каждому клиенту необходимо указать, какие поля и какие объекты он хочет вернуть, с какими полями.

Чтобы поддержать это динамически изменяющееся требование, один из подходов может состоять в том, чтобы WS был проходом к ES (с предварительной проверкой, такой как контроль доступа и последующие преобразования в ответ от ES). API-интерфейсы WS будут выглядеть точно так же, как API-интерфейсы ES. Пользовательский интерфейс должен создавать запросы ES через JS клиента и отправлять его на WS, который после контроля доступа получит данные от ES.

Я новичок в ES и скепти c этого подхода. Могут ли быть какие-то особые проблемы в этом подходе. Один из моих коллег работал над ES раньше, но всегда с клиентом бэкэнда Java, поэтому он не слишком уверен.

Я искал клиента ES Js, а здесь есть официальный здесь .

Некоторый контекст здесь:

У нас есть около 4 различных объектов (может увеличиться в будущем) с полными текстовыми полями и полями типа ключевых слов. Типичный поиск может иметь несколько фильтров и поисковых терминов и может указывать поля результатов. Кроме того, некоторые поиски будут проходить между объектами, а некоторые - отдельными. Мы поддерживаем отдельную сущность для каждой сущности.

1 Ответ

1 голос
/ 26 марта 2020

Что я понимаю из вашего поста, ниже приведено то, чего вы хотите достичь на высоком уровне.

В будущем может быть несколько клиентов для WS, каждый из которых имеет свои собственные сценарии бизнес-использования, и сложные требования к данным (в основном поля ответов)

И, поскольку вы не уверены, как это сделать, вы думаете о том, чтобы создавать запросы Elasticsearch из Javascript только в своем интерфейсе. Я не очень большой поклонник этого подхода, так как он раскрывает, как вы строите запросы и если какой-то хакер знает важную информацию, подобную приведенной ниже, то может поставить весь ваш кластер ES на колени:

  1. Знает, какие типы запросов с подстановочными знаками.

  2. Знает имена индексов и детали кластера ES (хотя у вас может быть контроль доступа, но вы по-прежнему предоставляете важную информацию).

  3. Как вы строите свои поисковые запросы.

Выше приведены лишь несколько примеров, которые добавят дополнительную информацию.

Правильный подход

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

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

...