Вопрос:

Можно ли получить имена полей на основе условия в Elasticsearch?

elasticsearch

7 просмотра

1 ответ

18 Репутация автора

Я обнаружил, что API GetMapping может дать мне все имена полей (то есть ключи) в ES, но у него нет способа отфильтровать результаты по условию. Есть ли способ сказать, дайте мне все имена полей, где customerID = foo123?


Контекст : я создаю пользовательский интерфейс поиска, который поддерживает только полевой поиск (без полнотекстовой поддержки), где пользователь может использовать «фильтры» (см. См. Ниже), чтобы найти то, что он ищет.

Цель : я хочу заполнить раскрывающийся список "Имена полей" . Это было бы просто, вызвав GetMapping, но я не могу поставить условие для этого. Мой кластер ES является мультитенантным, и в моем поисковом интерфейсе я хочу показывать только имена полей для клиентов, использующих его.

Как выглядит пользовательский интерфейс : Запустите фрагмент ниже, чтобы увидеть макет, который я сделал, чтобы помочь вам визуализировать

Field-name:
<select>
  <option>appName</option>
  <option>rules.myRule.fired</option>
  <option>rules.notMyRule.fired</option>
</select>

Operator:
<select>
  <option>=</option>
  <option>!=</option>
</select>

Value: <input type="text" value="true" width=1/>
<br/> Field-name:
<select>
  <option>appName</option>
  <option>rules.myRule.fired</option>
  <option>rules.notMyRule.fired</option>
</select>

Operator:
<select>
  <option>=</option>
  <option>!=</option>
</select>
Value: <input type="text" value="true" width=1/>
<br/>(+) Add more filters<br/>
<button>Search</button>

Автор: Ankit Kapur Источник Размещён: 10.08.2019 11:56

Ответы (1)


0 плюса

1266 Репутация автора

Самый простой способ добиться этого - разделить клиентов по разным индексам. Это также хорошо, если данные и поля для каждого клиента разные. Если у каждого клиента будет свой собственный индекс, то получение полей клиента может быть выполнено с помощью API GET Mapping напрямую, без необходимости использования другого фильтра.

Второй вариант - хранить записи (с сохранением состояния) для каждого клиента - какие поля он отправляет. Это можно сделать в индексе ES или в любой другой БД / кеше.

Третий вариант - принести X-документы для определенного идентификатора клиента с помощью API поиска, а затем запустить все эти документы и собрать в них имена полей - это может быть не полный список, поскольку вы проверяете только X-документы, но если X достаточно большой и документы повторяют свою структуру, то этого может быть достаточно.

Автор: ziv Размещён: 11.08.2019 08:40
Вопросы из категории :
32x32