Если вы используете Optimizely Graph для поиска, синонимы — это один из самых простых способов повысить релевантность, не затрагивая контент. Но их также легко неправильно настроить: вы можете успешно загружать синонимы и по-прежнему видеть нулевой эффект в своих запросах, если слот и языковой контекст не совпадают.
В этом посте я расскажу о практическом шаблоне: небольшом плагине администратора Optimizely для управления синонимами Graph, безопасного хранения черновиков в хранилище динамических данных Optimizely (DDS) и публикации в Graph только тогда, когда редактор решит, что он готов. Я также покажу, как проверить, что синонимы действительно достигли Graph, и как выполнять запросы с включенными синонимами, поскольку в Graph синонимы вступают в силу только тогда, когда вы явно включаете их в запрос.
Почему плагин…
В Optimizely Graph синонимы хранятся в виде ресурса («файла синонимов») в шлюзе Graph, а не в базе данных CMS. Загрузка осуществляется через конечную точку REST, а синонимы применяются только во время запроса, когда запрос явно разрешает их использование.
Это совершенно нормально для разработчика, использующего Postman, но в настоящей команде быстро возникают некоторые потребности:
- Редакторы хотят, чтобы пользовательский интерфейс управлял синонимами, не затрагивая Postman.
- Разработчикам нужна безопасность: черновики, проверка и явный этап публикации.
- Всем нужна уверенность в том, что содержимое Graph соответствует опубликованному.
Вот почему я хотел использовать собственный рабочий процесс CMS: безопасно редактировать, целенаправленно публиковать и проверять, что на самом деле хранит Graph.
Как синонимы работают в Optimizely Graph
Синонимы хранятся в «слотах»
График поддерживает два слота синонимов: ОДИН и ДВА. Вы загружаете синонимы в слот, а затем ссылаетесь на этот слот в запросе. Это полезно для настройки: вы можете сохранить «безопасные» синонимы в ОДНОМ, а «более агрессивные» расширения в ДВА и выбирать, какой слот(ы) применять в зависимости от контекста.
Синонимы применяются только тогда, когда они включены в запросе.
Загрузка синонимов не везде автоматически меняет поведение поиска. Синонимы включаются для каждого оператора фильтра путем добавления synonyms: ONE или synonyms: [ONE, TWO] на ваш запрос.
Языки в Graph обрабатываются в двух местах, и они должны совпадать. Когда вы загружаете синонимы, вы можете ограничить их конкретным языком, передав language_routing (например sv-SE). Затем Graph сохраняет отдельный ресурс-синоним для каждого слота и языка, поэтому «slot ONE + sv-SE» отличается от «slot ONE + en-US».
При запросе Graph применяет синонимы в языковом контексте запроса, который контролируется locale. Это означает, что ваш запрос должен использовать тот же языковой стандарт, что и загруженные вами синонимы. Если вы загружаете с language_routing=sv-SEпротестируйте с locale: sv-SE (нет ALL).
Пример:
Вот почему я построил это
Это решение представляет собой плагин администратора Optimizely CMS, который дает редакторам безопасный способ управления синонимами Optimizely Graph. Редакторы работают с текстовым форматом синонимов (по одному правилу на строку, поддерживаются оба эквивалентных правила, например a, b, c и правила замены, такие как a, b => c, d) внутри приложения Vue, размещенного на странице плагина. Страница плагина загружает приложение Vue, а все операции выполняются через конечные точки API, обеспечивая четкое разделение пользовательского интерфейса и логики предметной области.
Черновики хранятся в динамическом хранилище данных Optimizely (DDS), проверяются на стороне сервера (синтаксис, ограничения на длину строк, ограничения на количество записей) и передаются в Graph только тогда, когда редактор нажимает «Опубликовать».
Примечание о DDS и масштабировании: DDS используется здесь, потому что он прост, встроен и хорошо работает для небольших и средних наборов данных, но он не предназначен для высокой пропускной способности или очень больших объемов. Если вы ожидаете большое количество записей-синонимов, частые записи или тяжелые запросы/фильтрацию в масштабе, рассматривайте DDS как удобную отправную точку и рассмотрите возможность перемещения черновиков хранилища и журналов аудита в более подходящий вариант сохранения (например, выделенные таблицы SQL или внешнее хранилище), сохраняя при этом тот же рабочий процесс публикации/проверки.
Публикация и проверка
Публикация осуществляется через конечную точку REST шлюза Graph:
Опубликовать (загрузить синонимы)
- ПОМЕЩАТЬ
/resources/synonyms - Тип контента:
text/plain - Параметры запроса:
synonym_slot=one|twoи необязательноlanguage_routing=
Проверить (прочитать, что хранится в Graph)
- ПОЛУЧАТЬ
/resources/synonymsс теми же параметрами слота/языка
Эта проверка обратного чтения делает очевидным то, что в данный момент хранит Graph, и устраняет множество догадок при устранении неполадок. Наконец, чтобы фактически использовать синонимы, запросы GraphQL должны включать их для каждого поля с помощью synonyms: ONE или synonyms: [ONE, TWO] и используйте соответствующий языковой стандарт.
Настраивать
Выполните следующие действия, чтобы настроить менеджер синонимов.
Загрузите код
Полный пример доступен на GitHub:
Использованы исходные файлы:

Установите необходимые пакеты
Если вы уже используете клиент Optimizely Graph в своем решении, сохраните его. Этот плагин в основном использует конечные точки REST шлюза Graph для загрузки/проверки синонимов, поэтому HttpClient достаточно. (Клиент Graph по-прежнему полезен для запросов GraphQL и инструментов схемы.)

Регистрация услуг
В настройке DI (Program.cs/Startup) зарегистрируйте службу синонимов и службу Graph API:
Конфигурация
Вам потребуются учетные данные Content Graph в конфигурации (предпочтительно вводимые через переменные среды или секретное хранилище в реальных развертываниях):
Демо-база данных и вход
Репозиторий включает в себя минимальную базу данных Optimizely и демонстрационный вход в систему, чтобы вы могли быстро запустить образец. Только для локальной разработки — не используйте повторно эти учетные данные за пределами локальной/демо-версии и немедленно измените их, если вы адаптируете решение.
Запустите его (быстрый контрольный список)
- Клонируйте репозиторий и настройте учетные данные Content Graph.
- Запустите сайт.
- Использовать [url]/util/register, чтобы создать нового пользователя-администратора.
- В Optimizely перейдите в «Дополнения» → «Менеджер синонимов».
- Создайте запись синонима и сохраните черновик.
- Опубликуйте в Graph, затем запустите проверку загрузки для того же слота и языка.
- Протестируйте запрос GraphQL, используя ту же локаль и
synonyms: [ONE, TWO].
Обзор пользовательского интерфейса
Пользовательский интерфейс дает вам четкое представление о вашей библиотеке синонимов. В каждой строке отображается термин, его синонимы, слот (один/два), язык и является ли правило «эквивалентным» или «заменяющим». Вы также увидите, когда он последний раз обновлялся и является ли он черновиком или уже опубликован. Это сразу дает понять, над чем ведется работа, а что над тем, что находится вживую.
Интерфейс построен на Vue и простом CSS/JS и стилизован под внешний вид администратора Optimizely.

Модальное изменение синонима: редактируйте термин, слот, язык, направление/тип и значения синонима.

Модальное окно журнала публикации: показывает попытки публикации с отметкой времени, действием, сообщением и именем пользователя. Сохраняются 10 последних записей журнала.

Вкладка «Проверка»: выберите слот + язык и нажмите «Проверить загрузку», чтобы прочитать данные непосредственно из Graph и подтвердить, что там хранится.

Результаты проверки: показывает баннер успеха и возвращенные записи для выбранного слота/языка.

Заключение
Это решение было протестировано в Optimizely 12 и Optimizely 13 Preview 3.
Подводя итог, можно сказать, что синонимы Optimizely Graph — это мощный инструмент, но они также очевидны: вы не просто «загружаете синонимы, и они работают». Вам нужен повторяемый процесс управления ими, вам необходимо правильно определить их область действия (слот и язык) и включить их в запросы, где они действительно имеют значение.
Вот почему добавление синонимов в интерфейс администрирования Optimizely имеет такое большое значение. Рассматривая такие синонимы, как управляемый актив, разрабатывая и проверяя изменения, целенаправленно публикуя и проверяя, что хранит Graph, вы устраняете множество операционных рисков и догадок.
Это пример решения, которое должно быть практичным и простым в адаптации. Если вы попробуете это и у вас есть предложения, улучшения или вы столкнетесь с пограничными случаями (особенно в отношении языковой маршрутизации, слотов или поведения проверки), я буду очень признателен за ваши отзывы, не стесняйтесь открывать проблему или сообщать о проблеме в репозитории GitHub.
Ещё по этой теме

