Skip to main content
Эндпоинты поиска Pubrio (/companies/search, /people/search, /companies/advertisements/search) используют единый движок фильтров. Вы составляете тело запроса один раз, и одни и те же правила действуют на всех эндпоинтах — включая способ комбинирования мультизначных фильтров, сопоставление локаций и переопределение оператора по умолчанию с помощью filter_conditions.

Зачем единый движок фильтров?

Одна схема, три эндпоинта

Фильтры на уровне компании, такие как technologies, verticals и founded_dates, работают одинаково на /companies/search, /people/search и внутри company_filters в мониторах — вы изучаете их один раз.

AND/OR для каждого фильтра

По умолчанию используется OR (совпадает любое). Переведите отдельные фильтры в AND (совпадают все), добавив одну запись в filter_conditions — не затрагивая остальную часть тела запроса.

Нативные операторы Postgres

Фильтры-массивы компилируются в нативные операторы Postgres — && (пересечение) для OR, @> (содержит) для AND. Индексируемо, без постфильтрации на стороне приложения.

Те же фильтры в мониторах

Блок company_filters в Monitors принимает ту же форму, поэтому рабочий payload поиска также является рабочим payload монитора.

Анатомия поискового запроса

Каждый поисковый запрос строится из трёх слоёв в одном JSON-теле: Минимальный запрос /people/search, использующий все три слоя:

company_filters: держите ключи уровня компании сгруппированными

Обёртка company_filters: {...} — рекомендуемый способ отправки фильтров уровня компании: она визуально отделяет, какие ключи фильтруют человека, а какие — компанию, и соответствует форме, которую уже использует Monitors, поэтому payload’ы без изменений переносятся между конфигурациями поиска и монитора. Оба стиля работают; движок разворачивает обёрнутую форму на верхний уровень перед обработкой, и ключи верхнего уровня побеждают при конфликте:
Когда вы добавляете переопределение filter_conditions для ключа уровня компании, размещайте его внутри company_filters, чтобы оно перемещалось вместе с ключами, которые переопределяет.

Та же форма у вариантов /search/similar

POST /companies/search/similar и POST /people/search/similar принимают то же тело фильтров, что и их обычные аналоги (включая обёртку company_filters и filter_conditions). Каждый добавляет сверху шаг сходства: Конверт ответа в остальном идентичен стандартному эндпоинту search. Фильтры сужают пул кандидатов до применения ранжирования по сходству — поэтому сочетание company_locations: ["US"] с /people/search/similar возвращает наиболее близких людей из США к вашим референсным должностям, что и является паттерном «найти больше похожих на X в этих ограничениях».
В отличие от стандартных эндпоинтов /search, /search/similar не возвращает точное значение pagination.total_entries — оно ограничено, поскольку поиск похожих ранжирует результаты по релевантности и отображает только лучшие совпадения. Используйте поиск похожих, чтобы найти лучшие совпадения, а не чтобы перечислить каждое.

AND против OR — единственное решение, которое вы принимаете на фильтр

Мультизначные фильтры (technologies, verticals, keywords, categories, …) принимают массив. Оператор определяет, что означает «совпадение»:
Совпадает любое значение. Возвращает строки, чей массив пересекается с вводом.
Компания включается, если её технологический стек содержит хотя бы одну из Python, PostgreSQL или Kubernetes. Компилируется в Postgres column && ARRAY[...].Используйте, когда: вам нужен широкий охват — «интересуется любым из этого», «находится в любой из этих стран».
Фильтры, не перечисленные в filter_conditions, используют оператор по умолчанию (OR внутри массива, AND между разными ключами фильтров). Вы объявляете только переопределения — никогда значения по умолчанию.

Что можно переопределить

Каждый эндпоинт принимает переопределения для своего набора ключей. Ключи берутся из перечисления OpenAPI на каждой схеме *_filter_conditions:

Эндпоинт компаний

Ключи company_filter_conditions: keywords, verticals, vertical_categories, vertical_sub_categories, technologies, categories, advertisement_target_locations, advertisement_exclude_target_locations, advertisement_search_terms, places, exclude_places, job_exclude_locations.

Эндпоинт людей

Ключи people_filter_conditions (делегируются движку компаний): keywords, verticals, vertical_categories, vertical_sub_categories, technologies, categories, places, exclude_places, плюс social_media.

Эндпоинт рекламы

Ключи ads_filter_conditions: target_locations, exclude_target_locations. Набор меньше, потому что реклама фильтруется только по стране показа.
При использовании /people/search ключ filter_conditions[].key для локаций уровня компании использует голое имя из движка компаний — places, exclude_places — а не имя с префиксом people-API (company_places). См. People + Company Filters.

Советы по производительности

Локации, диапазоны числа сотрудников и founded_dates индексированы и сокращают набор кандидатов быстрее, чем свободный текст или фильтры по вертикалям. Сочетайте их с одним-двумя точными фильтрами, прежде чем прибегать к поиску по сходству.
column @> ARRAY[a, b, c, …] требует наличия каждого значения. Кардинальность растёт быстро — AND по 10 технологиям в категории со средним значением 3 тега технологий возвращает почти ноль строк и вынуждает выполнить полное сканирование. Предпочитайте 2-4 значения на фильтр AND; переключайтесь на OR для исследовательских запросов.
Если вы не можете предоставить slug ID (вертикали, технологии, категории) и у вас есть только строки свободного текста, установите is_enable_similarity_search: true и similarity_score: 0.7. Движок разрешает совпадения перед применением фильтра — гораздо дешевле, чем сканирование текста.
employees: [[201, 500], [501, 1000]] (массив диапазонов) и revenues: [1000000, 5000000] (единый диапазон мин/макс) быстрее и более идиоматичны, чем длинные списки ID.

Фильтры активности рекламы

/companies/search может фильтровать по рекламной активности компании — сколько рекламы она размещает, есть ли активные объявления сейчас, какие платформы и форматы использует и как она ранжируется относительно других рекламодателей в определённой стране. POST /companies/advertisements/search также принимает все эти фильтры (advertisement_active_ads, advertisement_running_ads, advertisement_total_ads, advertisement_platform_count, advertisement_format_count, advertisement_impressions_estimate, advertisement_formats, advertisement_country_activity) — объявление включается, если компания-владелец соответствует границе. Используйте null для открытой границы — [1, null] означает «не менее 1», [null, 500] означает «500 или меньше».

Ранжирование внутри страны

advertisement_country_activity привязывает ранг, процентиль и оценку объёма к одной стране за раз — ранг рекламы компании в США ничего не говорит о её ранге в Германии, поэтому country обязателен:
rank отсчитывается от крупнейшего рекламодателя, как в гонке. 1 — крупнейший рекламодатель в этой стране, и число растёт по мере того, как объём рекламы снижается. Чтобы найти крупнейших рекламодателей, фильтруйте rank с низкой верхней границей — [null, 500] это топ-500. Фильтрация [500, null] находит всех, кто вне топ-499, что противоположно «крупному рекламодателю». Если вам нужна независимая от масштаба версия, работающая одинаково независимо от того, сколько рекламодателей в этой стране, используйте вместо этого percentile — он работает в обратном направлении, поэтому более высокое число означает более крупного рекламодателя: [90, null] это топ-10%.
Комбинируйте advertisement_country_activity со общестрановыми фильтрами выше в одном запросе — например, «в топ-500 в США и имеет не менее 100 активных объявлений по всей компании»:

Следующие шаги

filter_conditions

Справочник — каждый поддерживаемый ключ, каждое значение по умолчанию и готовые к копированию рецепты AND/OR.

People + Company Filters

Используйте любой фильтр компании внутри /people/search. Главная новая возможность единого движка.

Справочник Company Search

Полная схема запроса/ответа для /companies/search.

Справочник People Search

Полная схема запроса/ответа для /people/search.
Ищете описание фильтрации на стороне дашборда? См. Фильтрация и экспорт контактов в базе знаний.