/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, …) принимают массив. Оператор определяет, что означает «совпадение»:
- OR (по умолчанию)
- AND
Совпадает любое значение. Возвращает строки, чей массив пересекается с вводом.Компания включается, если её технологический стек содержит хотя бы одну из
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. Набор меньше, потому что реклама фильтруется только по стране показа.Советы по производительности
Сначала фильтруйте по индексированным столбцам
Сначала фильтруйте по индексированным столбцам
Локации, диапазоны числа сотрудников и
founded_dates индексированы и сокращают набор кандидатов быстрее, чем свободный текст или фильтры по вертикалям. Сочетайте их с одним-двумя точными фильтрами, прежде чем прибегать к поиску по сходству.Не злоупотребляйте AND на больших массивах
Не злоупотребляйте AND на больших массивах
column @> ARRAY[a, b, c, …] требует наличия каждого значения. Кардинальность растёт быстро — AND по 10 технологиям в категории со средним значением 3 тега технологий возвращает почти ноль строк и вынуждает выполнить полное сканирование. Предпочитайте 2-4 значения на фильтр AND; переключайтесь на OR для исследовательских запросов.Используйте is_enable_similarity_search для свободного текста
Используйте is_enable_similarity_search для свободного текста
Если вы не можете предоставить 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 обязателен:
advertisement_country_activity со общестрановыми фильтрами выше в одном запросе — например, «в топ-500 в США и имеет не менее 100 активных объявлений по всей компании»:
Следующие шаги
filter_conditions
Справочник — каждый поддерживаемый ключ, каждое значение по умолчанию и готовые к копированию рецепты AND/OR.
People + Company Filters
Используйте любой фильтр компании внутри
/people/search. Главная новая возможность единого движка.Справочник Company Search
Полная схема запроса/ответа для
/companies/search.Справочник People Search
Полная схема запроса/ответа для
/people/search.Ищете описание фильтрации на стороне дашборда? См. Фильтрация и экспорт контактов в базе знаний.

