Справочник по соединителю Elastic Notion
Соединитель Notion написан на Python с использованием фреймворка соединителей Elastic. Просмотрите исходный код этого соединителя (ветка 8.17, совместима с Elastic 8.17).
Справочник по управляемому соединителю Elastic
Просмотреть справку по управляемому соединителю Elastic
Доступность и предварительные требования
Этот управляемый коннектор был представлен в Elastic 8.14.0 в качестве управляемой службы в Elastic Cloud.
Чтобы использовать этот коннектор напрямую в Elastic Cloud, выполните все требования к управляемым коннекторам.
Этот коннектор находится в стадии бета-тестирования и может быть изменён. Дизайн и код менее отработан, чем официальные функции GA, и предоставляются как есть без каких-либо гарантий. Функции бета-версии не подпадают под SLA поддержки официальных функций GA.
Использование
Чтобы использовать этот коннектор в пользовательском интерфейсе, выберите плитку Notion при создании нового коннектора в разделе Поиск → Коннекторы.
Если вы уже знакомы с принципом работы коннекторов, вы также можете использовать API коннекторов.
Для дополнительных операций см. Пользовательский интерфейс коннекторов в Kibana.
Создание коннектора Notion
Использование пользовательского интерфейса
Чтобы создать новый коннектор Notion:
- В пользовательском интерфейсе Kibana перейдите на страницу Поиск → Контент → Коннекторы из главного меню или используйте поле глобального поиска.
- Следуйте инструкциям для создания нового нативного коннектора Notion.
Для дополнительных операций см. Пользовательский интерфейс коннекторов в Kibana.
Использование API
Вы можете использовать Elasticsearch API создания коннекторов для создания нового нативного коннектора Notion.
Например:
resp = client.connector.put(
connector_id="my-{service-name-stub}-connector",
index_name="my-elasticsearch-index",
name="Content synced from {service-name}",
service_type="{service-name-stub}",
is_native=True,
)
print(resp) const response = await client.connector.put({
connector_id: "my-{service-name-stub}-connector",
index_name: "my-elasticsearch-index",
name: "Content synced from {service-name}",
service_type: "{service-name-stub}",
is_native: true,
});
console.log(response); PUT _connector/my-notion-connector
{
"index_name": "my-elasticsearch-index",
"name": "Content synced from Notion",
"service_type": "notion",
"is_native": true
} Вам также потребуется создать ключ API для использования коннектором.
Пользователю необходимы права кластера manage_api_key, manage_connector и write_connector_secrets для программного создания ключей API.
Чтобы создать ключ API для коннектора:
-
Запустите следующую команду, заменив указанные значения. Обратите внимание на
idиencodedвозвращаемые значения из ответа:resp = client.security.create_api_key( name="my-connector-api-key", role_descriptors={ "my-connector-connector-role": { "cluster": [ "monitor", "manage_connector" ], "indices": [ { "names": [ "my-index_name", ".search-acl-filter-my-index_name", ".elastic-connectors*" ], "privileges": [ "all" ], "allow_restricted_indices": False } ] } }, ) print(resp)const response = await client.security.createApiKey({ name: "my-connector-api-key", role_descriptors: { "my-connector-connector-role": { cluster: ["monitor", "manage_connector"], indices: [ { names: [ "my-index_name", ".search-acl-filter-my-index_name", ".elastic-connectors*", ], privileges: ["all"], allow_restricted_indices: false, }, ], }, }, }); console.log(response);POST /_security/api_key { "name": "my-connector-api-key", "role_descriptors": { "my-connector-connector-role": { "cluster": [ "monitor", "manage_connector" ], "indices": [ { "names": [ "my-index_name", ".search-acl-filter-my-index_name", ".elastic-connectors*" ], "privileges": [ "all" ], "allow_restricted_indices": false } ] } } } -
Используйте значение
encodedдля хранения секрета коннектора и обратите внимание наidвозвращаемое значение из этого ответа:resp = client.perform_request( "POST", "/_connector/_secret", headers={"Content-Type": "application/json"}, body={ "value": "encoded_api_key" }, ) print(resp)const response = await client.transport.request({ method: "POST", path: "/_connector/_secret", body: { value: "encoded_api_key", }, }); console.log(response);POST _connector/_secret { "value": "encoded_api_key" } -
Используйте ключ API
idи секрет коннектораidдля обновления коннектора:resp = client.connector.update_api_key_id( connector_id="my_connector_id>", api_key_id="API key_id", api_key_secret_id="secret_id", ) print(resp)const response = await client.connector.updateApiKeyId({ connector_id: "my_connector_id>", api_key_id: "API key_id", api_key_secret_id: "secret_id", }); console.log(response);PUT /_connector/my_connector_id>/_api_key_id { "api_key_id": "API key_id", "api_key_secret_id": "secret_id" }
Подробные сведения обо всех доступных API коннекторов см. в документации по API Elasticsearch.
Подключение к Notion
Для подключения к Notion пользователю необходимо создать внутреннюю интеграцию для своего рабочего пространства Notion, которая может получать доступ к ресурсам с помощью внутреннего секретного токена интеграции. Настройте интеграцию со следующими параметрами:
- Пользователи должны предоставить
READразрешение на доступ к контенту, комментариям и пользователям для этой интеграции на вкладке «Возможности». - Пользователи должны вручную добавить интеграцию в качестве подключения к страницам верхнего уровня в рабочем пространстве. Подстраницы автоматически унаследуют подключения родительской страницы.
Настройка
Обратите внимание на следующие поля настройки:
-
Notion Secret Key(обязательно) -
Секретный токен, назначенный вашей интеграции для определённого рабочего пространства. Пример:
-
zyx-123453-12a2-100a-1123-93fd09d67394
-
-
Databases(обязательно) -
Список баз данных, разделённых запятыми, которые должен извлечь коннектор. Если значение равно
*, коннектор извлечёт все доступные базы данных в рабочем пространстве. Пример:-
database1, database2 -
*
-
-
Pages(обязательно) -
Список имён страниц, разделённых запятыми, которые должен извлечь коннектор. Если значение равно
*, коннектор извлечёт все доступные страницы в рабочем пространстве. Примеры:-
* -
Page1, Page2
-
-
Index Comments - Переключатель для включения извлечения и индексирования комментариев из рабочего пространства Notion для настроенных страниц, баз данных и соответствующих дочерних блоков. Значение по умолчанию равно
False.
Включение индексирования комментариев может повлиять на производительность коннектора из-за увеличения сетевых запросов. Поэтому по умолчанию это значение равно False.
Извлечение контента
См. извлечение контента.
Документы и синхронизации
Коннектор синхронизирует следующие объекты и сущности:
-
Страницы
- Включает метаданные, такие как
page name,id,last updated timeи т.д.
- Включает метаданные, такие как
-
Блоки
- Включает метаданные, такие как
title,type,id,content(в случае блока файлов) и т.д.
- Включает метаданные, такие как
-
Базы данных
- Включает метаданные, такие как
name,id,records,sizeи т.д.
- Включает метаданные, такие как
-
Пользователи
- Включает метаданные, такие как
name,id,email addressи т.д.
- Включает метаданные, такие как
-
Комментарии
- Включает контент и метаданные, такие как
id,last updated time,created byи т.д. - Примечание: Комментарии исключаются по умолчанию.
- Включает контент и метаданные, такие как
- Файлы размером более 10 МБ не будут извлечены.
- Разрешения не синхронизируются. Все документы, индексированные в развертывании Elastic, будут видны всем пользователям с доступом к соответствующему индексу Elasticsearch.
Правила синхронизации
Основные правила синхронизации одинаковы для всех коннекторов и доступны по умолчанию.
Расширенные правила синхронизации
Для применения расширенных правил синхронизации требуется полная синхронизация.
В данном разделе описаны расширенные правила синхронизации для этого коннектора, чтобы отфильтровать данные в Notion *перед* индексированием в Elasticsearch. Расширенные правила синхронизации определяются с помощью JSON-фрагмента DSL, специфичного для источника.
Расширенные правила синхронизации для Notion принимают следующие параметры:
-
searches: Фильтр поиска Notion для поиска по названию. -
query: Фильтр запроса базы данных Notion для извлечения конкретной базы данных.
Примеры
Пример 1
Индексирование каждой страницы, где название содержит Demo Page:
{
"searches": [
{
"filter": {
"value": "page"
},
"query": "Demo Page"
}
]
} Пример 2
Индексирование каждой базы данных, где название содержит Demo Database:
{
"searches": [
{
"filter": {
"value": "database"
},
"query": "Demo Database"
}
]
} Пример 3
Индексация каждой базы данных, где заголовок содержит Demo Database, и каждой страницы, где заголовок содержит Demo Page:
{
"searches": [
{
"filter": {
"value": "database"
},
"query": "Demo Database"
},
{
"filter": {
"value": "page"
},
"query": "Demo Page"
}
]
} Пример 4
Индексация всех страниц в рабочей области:
{
"searches": [
{
"filter": {
"value": "page"
},
"query": ""
}
]
} Пример 5
Индексация всех страниц и баз данных, связанных с рабочей областью:
{
"searches":[
{
"query":""
}
]
} Пример 6
Индексация всех строк базы данных, где запись является true для столбца Task completed и её тип (тип данных) – флажок:
{
"database_query_filters": [
{
"filter": {
"property": "Task completed",
"checkbox": {
"equals": true
}
},
"database_id": "database_id"
}
]
} Пример 7
Индексация всех строк конкретной базы данных:
{
"database_query_filters": [
{
"database_id": "database_id"
}
]
} Пример 8
Индексация всех блоков, определённых в searches и database_query_filters:
{
"searches":[
{
"query":"External tasks",
"filter":{
"value":"database"
}
},
{
"query":"External tasks",
"filter":{
"value":"page"
}
}
],
"database_query_filters":[
{
"database_id":"notion_database_id1",
"filter":{
"property":"Task completed",
"checkbox":{
"equals":true
}
}
}
]
} В этом примере синтаксис объекта filter для database_query_filters определён согласно документации Notion.
Известные проблемы
-
Обновления новых страниц могут не отображаться сразу в API Notion.
Это может привести к тому, что эти страницы не будут проиндексированы коннектором, если синхронизация инициирована сразу после их добавления. Чтобы убедиться, что все страницы проиндексированы, инициируйте синхронизацию через несколько минут после добавления страниц в Notion.
-
Общедоступный API Notion не поддерживает связанные базы данных.
Связанные базы данных в Notion – это копии базы данных, которые можно фильтровать, сортировать и отображать по-разному. Чтобы получить информацию из связанной базы данных, необходимо обратиться к исходной базе данных источника. Для более подробной информации обратитесь к документации Notion.
-
Объекты документов
propertiesсериализуются как строки подdetails.Схема Notion для
propertiesне является согласованной и может привести кdocument_parsing_exceptions, если проиндексирована в Elasticsearch как объект. По этой причине объектpropertiesсериализуется как JSON-строка и хранится в полеdetails. Если вам нужно искать подобъект изproperties, вам может потребоваться обработать полеdetailsв конвейере загрузки, чтобы извлечь необходимые подполя.
Обратитесь к Известным проблемам для списка известных проблем для всех коннекторов.
Устранение неполадок
См. Устранение неполадок.
Безопасность
См. Безопасность.
Ссылка на автономный коннектор
Ссылка на самостоятельно управляемый коннектор
Доступность и предварительные требования
Этот коннектор был представлен в Elastic 8.13.0 в виде самостоятельно управляемого коннектора.
Чтобы использовать этот коннектор, выполните все предварительные требования к самостоятельно управляемым коннекторам. Важно, что вы должны развернуть службу коннекторов на собственной инфраструктуре. У вас есть два варианта развертывания:
- Запустить службу коннекторов из исходного кода. Используйте этот вариант, если вы чувствуете себя комфортно с Python и хотите быстро итерировать локально.
- Запустить службу коннекторов в Docker. Используйте этот вариант, если вы хотите развернуть коннекторы на сервере или использовать платформу оркестрации контейнеров.
Этот коннектор находится в бета-версии и может быть изменён. Дизайн и код менее зрелые, чем официальные функции GA, и предоставляются как есть без гарантий. Функции бета-версии не подпадают под SLA поддержки официальных функций GA.
Использование
Чтобы использовать этот коннектор в пользовательском интерфейсе, выберите плитку Notion при создании нового коннектора в разделе Поиск → Коннекторы.
Дополнительные операции см. в Пользовательском интерфейсе коннекторов в Kibana.
Создание коннектора Notion
Использование пользовательского интерфейса
Чтобы создать новый коннектор Notion:
- В пользовательском интерфейсе Kibana перейдите на страницу Поиск → Содержимое → Коннекторы из главного меню или используйте поле глобального поиска.
- Следуйте инструкциям для создания нового Notion самостоятельно управляемого коннектора.
Использование API
Вы можете использовать Elasticsearch API для создания коннекторов, чтобы создать новый самостоятельно управляемый коннектор Notion.
Например:
resp = client.connector.put(
connector_id="my-{service-name-stub}-connector",
index_name="my-elasticsearch-index",
name="Content synced from {service-name}",
service_type="{service-name-stub}",
)
print(resp) const response = await client.connector.put({
connector_id: "my-{service-name-stub}-connector",
index_name: "my-elasticsearch-index",
name: "Content synced from {service-name}",
service_type: "{service-name-stub}",
});
console.log(response); PUT _connector/my-notion-connector
{
"index_name": "my-elasticsearch-index",
"name": "Content synced from Notion",
"service_type": "notion"
} Вам также потребуется создать ключ API для использования коннектором.
Пользователь нуждается в правах кластера manage_api_key, manage_connector и write_connector_secrets для программированного создания ключей API.
Чтобы создать ключ API для коннектора:
-
Выполните следующую команду, заменив указанные значения. Обратите внимание на возвращаемые значения
encodedиз ответа:resp = client.security.create_api_key( name="connector_name-connector-api-key", role_descriptors={ "connector_name-connector-role": { "cluster": [ "monitor", "manage_connector" ], "indices": [ { "names": [ "index_name", ".search-acl-filter-index_name", ".elastic-connectors*" ], "privileges": [ "all" ], "allow_restricted_indices": False } ] } }, ) print(resp)const response = await client.security.createApiKey({ name: "connector_name-connector-api-key", role_descriptors: { "connector_name-connector-role": { cluster: ["monitor", "manage_connector"], indices: [ { names: [ "index_name", ".search-acl-filter-index_name", ".elastic-connectors*", ], privileges: ["all"], allow_restricted_indices: false, }, ], }, }, }); console.log(response);POST /_security/api_key { "name": "connector_name-connector-api-key", "role_descriptors": { "connector_name-connector-role": { "cluster": [ "monitor", "manage_connector" ], "indices": [ { "names": [ "index_name", ".search-acl-filter-index_name", ".elastic-connectors*" ], "privileges": [ "all" ], "allow_restricted_indices": false } ] } } } - Обновите файл
config.ymlсо значением ключа APIencoded.
Подробную информацию обо всех доступных API коннекторов см. в документации API Elasticsearch.
Подключение к Notion
Для подключения к Notion пользователю необходимо создать внутреннюю интеграцию для своего рабочего пространства Notion, которая может получать доступ к ресурсам с помощью внутреннего токена секрета интеграции. Настройте интеграцию со следующими настройками:
- Пользователи должны предоставить разрешение
READна содержимое, комментарии и возможности пользователей для этой интеграции из вкладки «Возможности». - Пользователи должны вручную добавить интеграцию в качестве подключения к страницам верхнего уровня в рабочем пространстве. Подстраницы будут автоматически унаследовать подключения родительской страницы.
Развертывание с Docker
Вы можете развернуть коннектор Notion как самостоятельно управляемый коннектор с помощью Docker. Следуйте этим инструкциям.
Шаг 1: Загрузка образца файла конфигурации
Загрузите образец файла конфигурации. Вы можете загрузить его вручную или выполнить следующую команду:
curl https://raw.githubusercontent.com/elastic/connectors/main/config.yml.example --output ~/connectors-config/config.yml
Не забудьте обновить значение аргумента --output, если имя вашей директории другое или вы хотите использовать другое имя файла конфигурации.
Шаг 2: Обновление файла конфигурации для вашего самостоятельно управляемого коннектора
Обновите файл конфигурации с указанными ниже настройками, чтобы они соответствовали вашей среде:
-
elasticsearch.host -
elasticsearch.api_key -
connectors
Если вы запускаете службу коннектора в Docker-контейнере с Elasticsearch и Kibana, ваш файл конфигурации будет выглядеть так:
# When connecting to your cloud deployment you should edit the host value
elasticsearch.host: http://host.docker.internal:9200
elasticsearch.api_key: <ELASTICSEARCH_API_KEY>
connectors:
-
connector_id: <CONNECTOR_ID_FROM_KIBANA>
service_type: notion
api_key: <CONNECTOR_API_KEY_FROM_KIBANA> # Optional. If not provided, the connector will use the elasticsearch.api_key instead Использование elasticsearch.api_key является рекомендуемым методом аутентификации. Однако вы также можете использовать elasticsearch.username и elasticsearch.password для аутентификации с вашим экземпляром Elasticsearch.
Примечание: Вы можете изменить другие настройки по умолчанию, просто раскомментировав определённые настройки в файле конфигурации и изменив их значения.
Шаг 3: Запуск Docker-изображения
Запустите Docker-образ с помощью следующей команды:
docker run \ -v ~/connectors-config:/config \ --network "elastic" \ --tty \ --rm \ docker.elastic.co/enterprise-search/elastic-connectors:8.17.3 \ /app/bin/elastic-ingest \ -c /config/config.yml
Дополнительные сведения см. в DOCKER.md в репозитории elastic/connectors.
Найдите все доступные Docker-образы в официальном реестре.
У нас также есть быстрый вариант самостоятельно управляемого развертывания с помощью Docker Compose, позволяющий одновременно запустить все необходимые службы: Elasticsearch, Kibana и службу коннекторов. Дополнительную информацию см. в файле README в репозитории elastic/connectors.
Настройка
Обратите внимание на следующие поля конфигурации:
-
Notion Secret Key(обязательно) -
Токен секрета, назначенный вашей интеграции для конкретного рабочего пространства. Пример:
-
zyx-123453-12a2-100a-1123-93fd09d67394
-
-
Databases(обязательно) -
Список баз данных, разделяемых запятыми, которые должен извлечь коннектор. Если значение равно
*, коннектор извлечёт все доступные базы данных в рабочем пространстве. Пример:-
database1, database2 -
*
-
-
Pages(обязательно) -
Список имён страниц, разделяемых запятыми, которые должен извлечь коннектор. Если значение равно
*, коннектор извлечёт все доступные страницы в рабочем пространстве. Примеры:-
* -
Page1, Page2
-
-
Index Comments - Переключатель для включения извлечения и индексирования комментариев из рабочего пространства Notion для настроенных страниц, баз данных и соответствующих дочерних блоков. Значение по умолчанию —
False.
Включение индексирования комментариев может повлиять на производительность коннектора из-за увеличения сетевых запросов. Поэтому по умолчанию это значение равно False.
Извлечение содержимого
Документы и синхронизации
Коннектор синхронизирует следующие объекты и сущности:
-
Страницы
- Включает метаданные, такие как
page name,id,last updated timeи т.д.
- Включает метаданные, такие как
-
Блоки
- Включает метаданные, такие как
title,type,id,content(в случае с блоком файла) и т.д.
- Включает метаданные, такие как
-
Базы данных
- Включает метаданные, такие как
name,id,records,sizeи т.д.
- Включает метаданные, такие как
-
Пользователи
- Включает метаданные, такие как
name,id,email addressи т.д.
- Включает метаданные, такие как
-
Комментарии
- Включает содержимое и метаданные, такие как
id,last updated time,created byи т.д. - Примечание: Комментарии по умолчанию исключаются.
- Включает содержимое и метаданные, такие как
- Файлы размером более 10 МБ не будут извлечены.
- Разрешения не синхронизируются. Все документы, индексированные в развертывание Elastic, будут видны всем пользователям с доступом к соответствующему индексу Elasticsearch.
Правила синхронизации
Основные правила синхронизации идентичны для всех соединителей и доступны по умолчанию.
Расширенные правила синхронизации
Для применения расширенных правил синхронизации требуется полная синхронизация.
В следующем разделе описываются расширенные правила синхронизации для данного соединителя, для фильтрации данных в Notion перед индексированием в Elasticsearch. Расширенные правила синхронизации определяются через JSON-фрагмент DSL, специфичный для источника.
Расширенные правила синхронизации для Notion принимают следующие параметры:
-
searches: Фильтр поиска Notion для поиска по заголовку. -
query: Фильтр запроса базы данных Notion для извлечения определенной базы данных.
Примеры
Пример 1
Индексирование каждой страницы, где заголовок содержит Demo Page:
{
"searches": [
{
"filter": {
"value": "page"
},
"query": "Demo Page"
}
]
} Пример 2
Индексирование каждой базы данных, где заголовок содержит Demo Database:
{
"searches": [
{
"filter": {
"value": "database"
},
"query": "Demo Database"
}
]
} Пример 3
Индексирование каждой базы данных, где заголовок содержит Demo Database, и каждой страницы, где заголовок содержит Demo Page:
{
"searches": [
{
"filter": {
"value": "database"
},
"query": "Demo Database"
},
{
"filter": {
"value": "page"
},
"query": "Demo Page"
}
]
} Пример 4
Индексирование всех страниц в рабочем пространстве:
{
"searches": [
{
"filter": {
"value": "page"
},
"query": ""
}
]
} Пример 5
Индексирование всех страниц и баз данных, связанных с рабочим пространством:
{
"searches":[
{
"query":""
}
]
} Пример 6
Индексирование всех строк базы данных, где запись является true для столбца Task completed, а её свойство (тип данных) — флажок:
{
"database_query_filters": [
{
"filter": {
"property": "Task completed",
"checkbox": {
"equals": true
}
},
"database_id": "database_id"
}
]
} Пример 7
Индексирование всех строк определённой базы данных:
{
"database_query_filters": [
{
"database_id": "database_id"
}
]
} Пример 8
Индексирование всех блоков, определённых в searches и database_query_filters:
{
"searches":[
{
"query":"External tasks",
"filter":{
"value":"database"
}
},
{
"query":"External tasks",
"filter":{
"value":"page"
}
}
],
"database_query_filters":[
{
"database_id":"notion_database_id1",
"filter":{
"property":"Task completed",
"checkbox":{
"equals":true
}
}
}
]
} В этом примере синтаксис объекта filter для database_query_filters определён в соответствии с документацией Notion.
Операции клиента соединителя
Тестирование от начала до конца
Фреймворк соединителя позволяет операторам запускать функциональные тесты на реальном источнике данных, используя Docker Compose. Для выполнения этого теста вам не нужен запущенный Elasticsearch или Notion источник.
См. тестирование соединителя для получения дополнительной информации.
Для выполнения E2E-тестирования для соединителя Notion выполните следующую команду:
$ make ftest NAME=notion
Для ускорения тестов добавьте флаг DATA_SIZE=small:
make ftest NAME=notion DATA_SIZE=small
По умолчанию, DATA_SIZE=MEDIUM.
Известные проблемы
-
Изменения новых страниц могут не отображаться немедленно в API Notion.
Это может привести к тому, что эти страницы не будут проиндексированы соединителем, если синхронизация инициирована сразу после их добавления. Чтобы убедиться, что все страницы проиндексированы, инициируйте синхронизацию через несколько минут после добавления страниц в Notion.
-
Общедоступный API Notion не поддерживает связанные базы данных.
Связанные базы данных в Notion являются копиями базы данных, которые могут быть отфильтрованы, отсортированы и просмотрены по-разному. Чтобы получить информацию из связанной базы данных, необходимо указать исходную базу данных. Дополнительная информация в документации Notion.
-
Объекты документов
propertiesсериализуются как строки подdetails.Схема Notion для
propertiesне является согласованной и может привести кdocument_parsing_exceptions, если она индексируется в Elasticsearch как объект. По этой причине объектpropertiesсериализуется как JSON-строка и хранится в полеdetails. Если вам необходимо искать подобъект изproperties, возможно, потребуется пост-обработка поляdetailsв конвейере извлечения, чтобы извлечь необходимые подполя.
См. Известные проблемы для получения списка известных проблем для всех соединителей.
Устранение неполадок
См. Устранение неполадок.
Безопасность
См. Безопасность.
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/es-connectors-notion.html