AACSearch / руководство
Разбор датасета и схема
Отправьте образец данных, получите профиль, предложение схемы коллекции и ролей полей, проверьте доступные возможности и подтвердите профиль.
Импорт данных обычно начинается с догадки. Вы смотрите на записи, решаете, какое поле — заголовок, какое — фасет, какое хранит цену, и создаёте схему коллекции вручную. Если догадка неверна, вы узнаёте об этом позже — по плохим результатам поиска.
Разбор датасета превращает догадку в измерение. Вы отправляете образец своих записей — или небольшой файл целиком — и получаете:
- профиль образца: найденные поля, наблюдаемые типы и полноту заполнения;
- предложение: готовое сопоставление ваших полей с ролями вроде
title,priceилиcategory, включая получившуюся схему иquery_by; - оценку возможностей: какие функции платформы эти данные способны поддерживать.
Ничего не записывается, пока вы не подтвердите.
В консоли
Это шаг Разбор данных на экране Sources (/dashboard/sources). Там можно
вставить образец, посмотреть предложение и применить его одним нажатием. Эта
страница описывает те же операции для API и пайплайнов.
Прежде чем начать
- Полный API-ключ — подтверждение профиля записывает данные для коллекции.
- Репрезентативный образец: до 100 документов или 2 МБ текста.
- Коллекция для самого preview не нужна. Разбор — это способ решить, что создавать.
Что вы получите
Схему коллекции, которую не пришлось придумывать, и сохранённый согласованный профиль, которого будут придерживаться последующие импорты.
Шаги
1. Отправьте образец
curl -X POST https://api.aacsearch.com/v1/ingest/preview \
-H "X-NOVA-API-KEY: $NOVA_API_KEY" -H "Content-Type: application/json" \
-d '{
"source": "documents",
"documents": [
{ "id": "1", "title": "Дрель аккумуляторная 18В", "brand": "Acme", "price": 89.0, "in_stock": true },
{ "id": "2", "title": "Гайковёрт 18В", "brand": "Acme", "price": 119.0, "in_stock": false }
]
}'source определяет, как читается образец:
source | Передавайте | Для чего |
|---|---|---|
documents | documents[] | JSON-записи, которые уже есть |
csv | content | Выгрузка CSV |
markdown | content | Тексты или документация |
html | content | Страница или снимок sitemap |
Для текстовых источников передавайте content вместо documents — вместе
они дают 400. Используйте source_name, чтобы указать происхождение, и
total_count, чтобы сказать, что реальный датасет больше образца.
При необходимости передайте roles, чтобы заявить то, что вы уже знаете,
например {"price": "price"}: тогда предложение строится от вашего знания, а не
от догадки. Заданные вами поля помечаются role_source: "explicit",
выведенные — "inferred".
Ожидаемый результат: 200 с profile, proposal и capabilities.
2. Прочитайте профиль
{
"profile": {
"version": 1,
"sample_count": 2,
"truncated": false,
"fields": [
{
"name": "title",
"types": ["string"],
"present_count": 2,
"null_count": 0,
"coverage": 1,
"role": "title",
"role_source": "inferred",
"reasons": ["unique text with high coverage"]
}
],
"domain_candidates": ["commerce", "generic"],
"warnings": []
},
"proposal": { "fields": [], "query_by": [], "roles": {}, "…": "…" },
"capabilities": [{ "id": "keyword_search", "data": "candidate", "…": "…" }]
}Профиль описывает образец, а не весь датасет:
| Поле | Значение |
|---|---|
sample_count | Сколько записей разобрано |
total_count | Заявленный вами общий размер; отсутствует, если неизвестен |
fields[].types | Наблюдаемые типы; больше одного — конфликт |
fields[].coverage | Доля записей с этим полем (0–1) |
fields[].role | Назначенная роль: id, title, text, url, image, category, price, date, boolean, unknown |
fields[].reasons | Почему выбрана эта роль |
domain_candidates | Догадки о домене: commerce, content, knowledge, generic |
truncated | Образец или парсер остановились раньше |
Усечённый профиль — не описание датасета
truncated: true означает, что профиль покрывает лишь часть отправленного:
парсер упёрся в свой предел или вы передали меньше записей, чем total_count.
Считайте предложение отправной точкой и проверьте его перед подтверждением.
3. Проверьте, какие возможности поддерживают данные
capabilities[] отвечает на главный вопрос до того, как вы начнёте строить на
этой схеме. У каждой записи есть id — keyword_search, facets,
semantic_search, image_search, assistant или recommendations — и она
оценивает одно измерение:
| Свойство | Значения |
|---|---|
data | candidate (образец поддерживает) или insufficient |
configuration | unknown |
entitlement | unknown |
verification | unverified |
reasons | Причина словами |
По вашему образцу оценивается только data. Право доступа по тарифу и
конфигурация проверяются в другом месте — см. лимиты и
оплату.
Проверка: нужные вам возможности сообщают data: "candidate". Если нет —
добавьте недостающее поле в источнике и отправьте образец снова: у preview нет
побочных эффектов, поэтому итерируйте здесь, а не после импорта.
4. Подтвердите профиль
Подтверждение сохраняет принятое предложение для коллекции, чтобы последующие импорты следовали согласованным ролям, а не выводили их заново.
curl -X PUT https://api.aacsearch.com/v1/collections/products/profile \
-H "X-NOVA-API-KEY: $NOVA_API_KEY" -H "Content-Type: application/json" \
-d '{
"source": "documents",
"documents": [ { "id": "1", "title": "Дрель аккумуляторная 18В", "price": 89.0 } ],
"roles": { "title": "title", "price": "price" }
}'Тело имеет ту же форму, что и у preview — образец и выбранные вами roles.
Подтверждение заново выполняет разбор и сохраняет результат.
Ожидаемый результат: сохранённый профиль в той же форме, что и ответ preview.
Проверка: GET /collections/products/profile возвращает его. Повторное
подтверждение заменяет профиль, поэтому следующий импорт пойдёт по новому
решению.
Для подтверждения коллекция должна существовать
Preview самодостаточен, но подтверждение пишет в
/collections/{collectionName}/profile. Сначала создайте коллекцию — см.
инкрементальную индексацию.
Частые проблемы
| Симптом | Причина | Решение |
|---|---|---|
400 documents source requires documents only; text sources require content only. | Переданы и documents, и content, либо ни одного | Передайте ровно одно, в соответствии с source |
400 с упоминанием парсера | Некорректный CSV/HTML или контент больше 2 МБ | Отправьте меньший корректный образец |
truncated: true с предупреждением parser_warnings | Парсер упёрся в предел | Отправьте меньший образец и укажите total_count |
Возможность сообщает insufficient | Нужное поле отсутствует или разрежено | Добавьте поле в источнике и отправьте образец снова |
| Отклонено больше 100 документов | Ограничение образца | Оставьте 100 репрезентативных записей |
404 при подтверждении | Коллекции ещё нет | Создайте её, затем подтвердите |
Далее
- Инкрементальная индексация — создайте коллекцию и импортируйте данные.
- CMS-коннекторы — тот же разбор внутри сценария Sources.
- Профили поиска и релизы — что настроить после схемы.
Инкрементальная индексация
Синхронизация коллекции с каталогом — upsert, частичные обновления, пакетный импорт с построчными результатами, удаление, асинхронные задания и переиндексация без простоя.
Коннекторы CMS
Какие платформы магазинов синхронизируются с AACSearch, как аутентифицируется коннектор, что он передаёт, push- и pull-синхронизация, установки CMS, где в консоли виден статус синхронизации и какие есть ограничения.