Un conector de contenido es un programa de software usado para desviar los datos en un repositorio de una empresa y propagar una fuente de datos. Google brinda las siguientes opciones para desarrollar conectores de contenido:
El SDK de Content Connector Esta es una buena opción si estás programando en Java. El SDK de Content Connector es un wrapper alrededor de la API de REST que te permite crear conectores rápidamente. Para crear un conector de contenido mediante el uso del SDK, consulta Crea un conector de contenido con el SDK de Content Connector.
Una API de REST de bajo nivel o bibliotecas de la API. Usa estas opciones si no programas en Java, o si tu base de código se adapta mejor a una API de REST o a una biblioteca. Para crear un conector de contenido con la API de REST, consulta Crea un conector de contenido con la API de REST.
Un conector de contenido típico realiza las siguientes tareas:
- Lee y procesa parámetros de configuración.
- Extrae fragmentos discretos de datos indexables, llamados "elementos", del repositorio de contenido de terceros.
- Combina LCA, metadatos y datos de contenido en elementos indexables.
- Indexa elementos a la fuente de datos de Cloud Search.
- (opcional) Presta atención a las notificaciones de cambios del repositorio de contenido de terceros. Las notificaciones de cambios se convierten en solicitudes de indexación para mantener la fuente de datos de Cloud Search en sincronización con el repositorio de terceros. El conector solo realiza esta tarea si el repositorio es compatible con la detección de cambios.
Crea un conector de contenido con el SDK de Content Connector
En las siguientes secciones, se explica cómo crear un conector de contenido con el SDK de Content Connector.
Configura dependencias
Debes incluir determinadas dependencias en el archivo de compilación para usar el SDK. Haz clic en la pestaña a continuación para ver las dependencias del entorno de compilación:
Maven
<dependency>
<groupId>com.google.enterprise.cloudsearch</groupId>
<artifactId>google-cloudsearch-indexing-connector-sdk</artifactId>
<version>v1-0.0.3</version>
</dependency>
Gradle
compile group: 'com.google.enterprise.cloudsearch',
name: 'google-cloudsearch-indexing-connector-sdk',
version: 'v1-0.0.3'
Crea tu configuración del conector
Cada conector tiene un archivo de configuración que contiene los parámetros que usa el conector, como el ID de tu repositorio. Los parámetros se definen de la siguiente manera:
par clave-valor, como
api.sourceId=1234567890abcdef
El SDK de Google Cloud Search contiene varios parámetros de configuración proporcionados por Google que son usados por todos los conectores. Debes declarar los siguientes parámetros proporcionados por Google en tu archivo de configuración:
- Para un conector de contenido, debes declarar
api.sourceId
yapi.serviceAccountPrivateKeyFile
, ya que estos parámetros identifican la ubicación de tu repositorio y la clave privada necesaria para acceder al repositorio.
- Para un conector de identidad, debes declarar
api.identitySourceId
como esta identifica la ubicación de tu fuente de identidad externa. Si eres sincronizando usuarios, también debes declararapi.customerId
como el ID único para la cuenta de Google Workspace de tu empresa.
A menos que desees anular los valores predeterminados de otros parámetros proporcionados por Google, no necesitas declararlos en el archivo de configuración. Para obtener información adicional sobre los parámetros de configuración proporcionados por Google, como sobre cómo generar determinados IDs y claves, consulta Parámetros de configuración proporcionados por Google.
También puedes definir tus propios parámetros específicos del repositorio para usar en tu archivo de configuración.
Pasa el archivo de configuración al conector
Establece la propiedad del sistema config
para pasar el archivo de configuración a tu
o del conector. Puedes configurar la propiedad con el argumento -D
cuando comiences
el conector. Por ejemplo, el siguiente comando inicia el conector
por el archivo de configuración MyConfig.properties
:
java -classpath myconnector.jar;... -Dconfig=MyConfig.properties MyConnector
Si falta este argumento, el SDK intenta acceder a una configuración predeterminada.
llamado connector-config.properties
.
Determina tu estrategia de recorrido
La función primaria de un conector de contenido es recorrer un repositorio y luego indexar sus datos. Debes implementar una estrategia de recorrido en función del tamaño y diseño de los datos en tu repositorio. Puedes diseñar tu propia estrategia o elige entre las siguientes estrategias implementadas en el SDK:
- Estrategia de recorrido completo
Una estrategia de recorrido completo analiza todo el repositorio e indexa a ciegas cada elemento. Esta estrategia se usa comúnmente cuando tienes un repositorio pequeño y puedes permitirte la sobrecarga de realizar un recorrido completo cada vez que indexas.
Esta estrategia de recorrido es adecuada para repositorios pequeños con datos mayormente estáticos y no jerárquicos. También puedes usar esta estrategia de recorrido cuando la detección de cambios es difícil o no es compatible con el repositorio.
- Estrategia de recorrido de lista
Una estrategia de recorrido de lista analiza todo el repositorio, incluidos los nodos secundarios, y determina el estado de cada elemento. Luego, el conector realiza una segunda pasada y solo indexa elementos que son nuevos o que se actualizaron desde la última indexación. Esta estrategia se usa comúnmente para realizar actualizaciones graduales en un índice existente (en lugar de tener que hacer un recorrido completo cada vez que actualizas el índice).
Esta estrategia de recorrido es adecuada cuando la detección de cambios es difícil o no es compatible con el repositorio, cuando tienes datos no jerárquicos y cuando estás trabajando con conjuntos de datos muy grandes.
- Recorrido de grafos
Una estrategia de recorrido de grafos analiza todo el nodo principal y determina el estado de cada elemento. Luego, el conector realiza una segunda pasada y solo indexa elementos en el nodo raíz que son nuevos o que se actualizaron desde la última indexación. Por último, el conector pasa cualquier ID secundario e indexa elementos en los nodos secundarios que son nuevos o que se actualizaron. El conector continúa recursivamente a través de todos los nodos secundarios hasta que se hayan abordado todos los elementos. Este recorrido se usa normalmente para los repositorios jerárquicos donde no es práctico hacer una lista de todos los ID.
Esta estrategia es adecuada si tienes datos jerárquicos que deben ser rastreados, como una serie de directorios o páginas web.
Cada una de estas estrategias de recorrido se implementa a través de un conector de plantillas en el SDK. Si bien puedes implementar tu propia estrategia de recorrido, estas aceleran considerablemente el desarrollo de tu conector. Para crear un conector mediante el uso de una plantilla, consulta la sección correspondiente a tu estrategia de recorrido:
- Crea un conector de recorrido completo con una clase de plantilla
- Crea un conector de recorrido de lista mediante una clase de plantilla
- Crea un conector de recorrido de grafo mediante una clase de plantilla
Crea un conector de recorrido completo mediante el uso de una clase de plantilla
Esta sección de los documentos hace referencia a los fragmentos de código del ejemplo FullTraversalSample.
Implementa el punto de entrada del conector
El punto de entrada a un conector es el
main()
. La tarea principal de este método es crear una instancia de la
Application
e invocar su
start()
para ejecutar el conector.
Antes de llamar
application.start()
:
usa el
IndexingApplication.Builder
para crear una instancia de la
FullTraversalConnector
plantilla. El
FullTraversalConnector
acepta un
Repository
objeto cuyos métodos implementarás. En el siguiente fragmento de código, se muestra cómo
para implementar el método main()
:
En segundo plano, el SDK llama a
initConfig()
después de llamar al método main()
de tu conector
Application.build
El
Método initConfig()
realiza las siguientes tareas:
- Llama al
Configuation.isInitialized()
método para asegurarte de que elConfiguration
no se inicializó. - Inicializa un objeto
Configuration
con el par clave-valor proporcionado por Google. pares. Cada par clave-valor se almacena en unConfigValue
dentro del objetoConfiguration
.
Implementa la interfaz Repository
El único propósito del objeto Repository
es realizar el recorrido y
de los elementos del repositorio. Al usar
una plantilla, solo debes anular ciertos métodos dentro de Repository
para crear un conector de contenido. Los métodos que anulas dependen de la plantilla y de la estrategia de recorrido que usas. Para el
FullTraversalConnector
anula los siguientes métodos:
El
init()
. Para configurar e inicializar cualquier repositorio de datos, anula el parámetroinit()
.El
getAllDocs()
. Para recorrer e indexar todos los elementos en el repositorio de datos, anula el parámetrogetAllDocs()
. Se llama a este método una vez por cada recorrido programado (según lo define tu configuración).(Opcional) El
getChanges()
. Si tu repositorio es compatible con la detección de cambios, anula elgetChanges()
. Se llama a este método una vez por cada recorrido gradual programado (según lo define tu configuración) para recuperar elementos modificados y luego indexarlos.(Opcional) El
close()
. Si necesitas realizar una limpieza del repositorio, anulaclose()
. . Se llama a este método una vez durante el cierre del conector.
Cada uno de los métodos del
El objeto Repository
muestra algún tipo de
ApiOperation
. Un objeto ApiOperation
realiza una acción en forma de un solo objeto, o
quizás varios, IndexingService.indexItem()
para realizar la indexación real de tu repositorio.
Obtén parámetros de configuración personalizados
Como parte del control de la configuración del conector, deberás obtener cualquier
parámetros personalizados del
Configuration
. Por lo general, esta tarea se realiza
Repository
de la clase
init()
.
La clase Configuration
tiene varios métodos para obtener diferentes tipos de datos.
de una configuración. Cada método muestra un objeto ConfigValue
. Luego, deberás
usa la ConfigValue
get()
para recuperar el valor real.
El siguiente fragmento, de
FullTraversalSample
:
se muestra cómo recuperar un
un solo valor de número entero personalizado de un objeto Configuration
:
Para obtener y analizar un parámetro que contenga varios valores, usa uno de los
Analizadores de tipo de la clase Configuration
para analizar los datos en fragmentos separados.
En el siguiente fragmento del conector del instructivo, se usa el elemento
getMultiValue
para obtener una lista de nombres de repositorios de GitHub:
Realiza un recorrido completo
Anular
getAllDocs()
para realizar un recorrido completo y, luego, indexar tu repositorio. El getAllDocs()
acepta un punto de control. El punto de control se usa para reanudar la indexación en un elemento específico en caso de que se interrumpa el proceso. Para cada elemento de tu
repositorio, realiza estos pasos en el método getAllDocs()
:
- Establece permisos.
- Establece los metadatos para el elemento que indexas.
- Combina los metadatos y el elemento en un solo elemento indexable
RepositoryDoc
- Empaqueta cada elemento indexable en un iterador que muestra
getAllDocs()
. . Ten en cuenta quegetAllDocs()
en realidad muestra unCheckpointCloseableIterable
que es una iteración deApiOperation
objetos, cada uno de los cuales representa una solicitud a la API realizada en unRepositoryDoc
, como la indexación.
Si el conjunto de elementos es demasiado grande para procesarlo en una sola llamada, incluye un
punto de control y establece
hasMore(true)
para indicar que hay más elementos disponibles para indexar.
Establece los permisos para un elemento
Tu repositorio usa una Lista de control de acceso (LCA) para identificar los usuarios o grupos que tienen acceso a un elemento. Una LCA es una lista de ID para grupos o usuarios que pueden acceder al elemento.
Debes duplicar la LCA que usa tu repositorio para garantizar que solo esos usuarios con acceso a un elemento puede verlo en un resultado de la búsqueda. El Se debe incluir la LCA de un elemento cuando se indexa para que Google Cloud Search tenga la información que necesita para proporcionar el nivel de acceso correcto el elemento.
El SDK de Content Connector proporciona un amplio conjunto de métodos y clases de LCA para modelar las LCA de la mayoría de los repositorios. Debes analizar la LCA para cada elemento en tu repositorio y crear una LCA correspondiente para Google Cloud Search cuando indexes un elemento. Si tu LCA del repositorio emplea conceptos como la herencia de la LCA, modelar esa LCA puede ser complicado. Para obtener más información sobre las LCA de Google Cloud Search, consulta LCA de Google Cloud Search.
Nota: La API de indexación de Cloud Search es compatible con las LCA de un solo dominio. No es compatible con las LCA de dominio cruzado. Usa el
Acl.Builder
para establecer el acceso a cada elemento con una LCA. El siguiente fragmento de código, tomado
de la muestra de recorrido completa, permite
todos los usuarios o “principales”
(getCustomerPrincipal()
)
ser “lectores” de todos los artículos
(.setReaders()
)
al realizar una búsqueda.
Debes comprender las LCA con el objetivo de modelarlas de forma adecuada para el repositorio. Por ejemplo, podrías estar indexando archivos dentro de un sistema de archivos que usa algún tipo de modelo de herencia por el cual las carpetas secundarias heredan permisos de las carpetas principales. El modelado de la herencia de LCA requiere información adicional incluida en las LCA de Google Cloud Search
Establece los metadatos de un elemento
Los metadatos se almacenan en un objeto Item
. Para crear un Item
, necesitas un
mínimo de un ID de string único, un tipo de elemento, una LCA, una URL y una versión para el elemento.
En el siguiente fragmento de código, se muestra cómo compilar un Item
con la clase
IndexingItemBuilder
clase auxiliar.
Crea el elemento indexable
Una vez que hayas configurado los metadatos para el elemento, puedes crear la versión indexable real
con el
RepositoryDoc.Builder
clase. En el siguiente ejemplo, se muestra cómo crear un elemento indexable único.
Un RepositoryDoc
es un tipo de ApiOperation
que realiza la acción
IndexingService.indexItem()
.
También puedes usar
setRequestMode()
de la
RepositoryDoc.Builder
para identificar la solicitud de indexación como ASYNCHRONOUS
o SYNCHRONOUS
:
ASYNCHRONOUS
- El modo asíncrono da como resultado una latencia de indexación a entrega más prolongada y admite una gran cuota de capacidad de procesamiento para solicitudes de indexación. El modo asíncrono es Se recomienda para la indexación inicial (reabastecimiento) de todo el repositorio.
SYNCHRONOUS
- El modo síncrono reduce la latencia de indexación a entrega y
se adapta a una cuota de capacidad de procesamiento limitada. Se recomienda el modo síncrono para la indexación de actualizaciones y cambios en el repositorio. Si
Si no se especifica, el modo de solicitud predeterminado es
SYNCHRONOUS
.
Empaqueta cada elemento indexable en un iterador
La getAllDocs()
muestra un Iterator
, específicamente un
CheckpointCloseableIterable
,
de
RepositoryDoc
objetos. Puedes usar la
CheckpointClosableIterableImpl.Builder
para construir y mostrar un iterador. El siguiente fragmento de código muestra cómo construir y mostrar un iterador.
El SDK ejecuta cada llamada de indexación incluida dentro del iterador.
Próximos pasos
Aquí hay algunos pasos que puedes seguir:
- (Opcional) Si la capacidad de procesamiento de indexación parece lenta, consulta Aumenta la tasa de indexación para
FullTraversalConnector
. - Implementa
close()
(opcional). para liberar cualquier recurso antes del cierre. - Crea un conector de identidad mediante el SDK de Content Connector (opcional).
Crea un conector de recorrido de lista mediante el uso de una clase de plantilla
La cola de indexación de Cloud Search se usa para almacenar ID y valores hash opcionales para cada elemento en el repositorio. Un conector de recorrido de lista envía los ID de elementos a la cola de indexación de Google Cloud Search y los recupera uno por uno para la indexación. Google Cloud Search mantiene colas y compara contenidos de cola para determinar el estado del elemento, por ejemplo, si un elemento se ha borrado del repositorio. Para obtener más información sobre el de Indexación de datos, consulta La cola de indexación de Cloud Search.
Esta sección de los documentos hace referencia a los fragmentos de código del ejemplo ListTraversalSample.
Implementa el punto de entrada del conector
El punto de entrada a un conector es el
main()
. La tarea principal de este método es crear una instancia de la
Application
e invocar su
start()
para ejecutar el conector.
Antes de llamar
application.start()
:
usa el
IndexingApplication.Builder
para crear una instancia de la
ListingConnector
plantilla. ListingConnector
acepta un
Repository
objeto cuyos métodos implementarás. En el siguiente fragmento, se muestra cómo
Crea una instancia de ListingConnector
y su Repository
asociado:
En segundo plano, el SDK llama a
initConfig()
después de llamar al método main()
de tu conector
Application.build
El método initConfig()
:
- Llama al
Configuation.isInitialized()
método para asegurarte de que elConfiguration
no se inicializó. - Inicializa un objeto
Configuration
con el par clave-valor proporcionado por Google. pares. Cada par clave-valor se almacena en unConfigValue
dentro del objetoConfiguration
.
Implementa la interfaz Repository
El único propósito del objeto Repository
es realizar el recorrido y
de los elementos del repositorio. Cuando se usa una plantilla, solo necesitas anular
algunos métodos dentro de la interfaz Repository
para crear un conector de contenido
Los métodos que anules dependerán de la plantilla y de la estrategia de recorrido que uses. Para el
ListingConnector
:
anula los siguientes métodos:
El
init()
. Para configurar e inicializar cualquier repositorio de datos, anula el parámetroinit()
.La
getIds()
. Para recuperar los ID y los valores hash de todos los registros del repositorio, haz lo siguiente: anula el métodogetIds()
.La
getDoc()
. Para agregar nuevos, actualizar, modificar o borrar elementos del índice, anula el parámetrogetDoc()
.(Opcional) El
getChanges()
. Si tu repositorio es compatible con la detección de cambios, anula elgetChanges()
. Se llama a este método una vez por cada recorrido gradual programado (según lo define tu configuración) para recuperar elementos modificados y luego indexarlos.(Opcional) El
close()
. Si necesitas realizar una limpieza del repositorio, anulaclose()
. . Se llama a este método una vez durante el cierre del conector.
Cada uno de los métodos del objeto Repository
muestra algún tipo de
ApiOperation
. Un objeto ApiOperation
realiza una acción en forma de un solo objeto, o
quizás varios, IndexingService.indexItem()
para realizar la indexación real de tu repositorio.
Obtén parámetros de configuración personalizados
Como parte del control de la configuración del conector, deberás obtener cualquier
parámetros personalizados del
Configuration
. Por lo general, esta tarea se realiza
Repository
de la clase
init()
.
La clase Configuration
tiene varios métodos para obtener diferentes tipos de datos.
de una configuración. Cada método muestra un objeto ConfigValue
. Luego, deberás
usa la ConfigValue
get()
para recuperar el valor real.
El siguiente fragmento, de
FullTraversalSample
:
se muestra cómo recuperar un
un solo valor de número entero personalizado de un objeto Configuration
:
Para obtener y analizar un parámetro que contenga varios valores, usa uno de los
Analizadores de tipo de la clase Configuration
para analizar los datos en fragmentos separados.
En el siguiente fragmento del conector del instructivo, se usa el elemento
getMultiValue
para obtener una lista de nombres de repositorios de GitHub:
Realiza el recorrido de lista
Anular
getIds()
para recuperar los IDs y los valores hash de todos los registros del repositorio.
El método getIds()
acepta un punto de control. El punto de control se usa para reanudar la indexación en un elemento específico en caso de que se interrumpa el proceso.
Luego, anula el
getDoc()
para controlar cada elemento de la cola de indexación de Cloud Search.
Envía ID de elementos y valores hash
Anular
getIds()
para recuperar los IDs de artículo y los valores hash de su contenido asociado de las
en un repositorio de confianza. Los ID y pares de valor hash luego se empaquetan en una solicitud de operación push a la cola de indexación de Cloud Search. Por lo general, los ID principales o de raíz se envían primero, seguidos por los ID secundarios hasta que se haya procesado toda la jerarquía de elementos.
El método getIds()
acepta un punto de control que representa el último elemento que se va a
de forma manual. El punto de control se puede usar para reanudar la indexación en un elemento específico en caso de que se interrumpa el proceso. Para cada elemento de tu repositorio, realiza estas
Pasos en el método getIds()
:
- Obtén cada ID de elemento y el valor hash asociado del repositorio.
- Empaqueta cada ID y par de valor hash en un
PushItems
. - Combina cada
PushItems
en un iterador que muestra elgetIds()
. Ten en cuenta quegetIds()
en realidad muestra unCheckpointCloseableIterable
que es una iteración deApiOperation
objetos, cada uno de los cuales representa una solicitud a la API realizada en unRepositoryDoc
como el envío de elementos a la cola.
El siguiente fragmento de código muestra cómo obtener cada ID de artículo y valor hash y
insertarlos en un
PushItems
Un PushItems
es una solicitud ApiOperation
para enviar un elemento a Cloud Search.
de la cola de indexación.
En el siguiente fragmento de código, se muestra cómo usar la
PushItems.Builder
para empaquetar los IDs y los valores hash en un solo envío
ApiOperation
Los elementos se envían a la cola de indexación de Cloud Search para su posterior procesamiento.
Recupera y controla cada elemento
Anular
getDoc()
para controlar cada elemento de la cola de indexación de Cloud Search
Un elemento puede ser nuevo, modificado o sin cambios, o puede no existir más en el repositorio de código fuente. Recupera e indexa cada elemento que sea nuevo o modificado. Quita los elementos del índice que ya no existen en el repositorio de código fuente.
El método getDoc()
acepta un elemento de Google Cloud Search.
de la cola de indexación. Para cada elemento en la cola, sigue estos pasos en la
Método getDoc()
:
Comprueba si el ID del elemento, dentro de la cola de indexación de Cloud Search, existe en el repositorio. Si no existe, borra el elemento del índice.
Consulta el índice para el estado del elemento y, si un elemento no ha sido modificado (
ACCEPTED
), no hagas nada.Índice modificado o elementos nuevos:
- Configura los permisos.
- Establece los metadatos para el elemento que indexas.
- Combina los metadatos y el elemento en un solo elemento indexable
RepositoryDoc
- Muestra el
RepositoryDoc
.
Nota: La plantilla ListingConnector
no admite que se muestre null
en
el método getDoc()
Cuando se muestra null
, se genera una NullPointerException.
Controla los elementos borrados
El siguiente fragmento de código muestra cómo determinar si un elemento existe en el repositorio y, si no, cómo borrarlo.
Ten en cuenta que documents
es una estructura de datos que representa el repositorio. Si
documentID
no se encuentra en documents
, devolver
APIOperations.deleteItem(resourceName)
para borrar el elemento del índice.
Controla elementos no modificados
El siguiente fragmento de código muestra cómo consultar el estado del elemento en la cola de indexación de Cloud Search y controlar un elemento no modificado.
Para determinar si un elemento no está modificado, verifica el estado del elemento, así como otros metadatos que pueden indicar un cambio. En el ejemplo, el hash de los metadatos se usa para determinar si el elemento se ha modificado.
Configura los permisos para un elemento
Tu repositorio usa una Lista de control de acceso (LCA) para identificar los usuarios o grupos que tienen acceso a un elemento. Una LCA es una lista de ID para grupos o usuarios que pueden acceder al elemento.
Debes duplicar la LCA que usa tu repositorio para garantizar que solo esos usuarios con acceso a un elemento puede verlo en un resultado de la búsqueda. El Se debe incluir la LCA de un elemento cuando se indexa para que Google Cloud Search tenga la información que necesita para proporcionar el nivel de acceso correcto el elemento.
El SDK de Content Connector proporciona un amplio conjunto de métodos y clases de LCA para modelar las LCA de la mayoría de los repositorios. Debes analizar la LCA para cada elemento en tu repositorio y crear una LCA correspondiente para Google Cloud Search cuando indexes un elemento. Si tu LCA del repositorio emplea conceptos como la herencia de la LCA, modelar esa LCA puede ser complicado. Para obtener más información sobre las LCA de Google Cloud Search, consulta LCA de Google Cloud Search.
Nota: La API de indexación de Cloud Search es compatible con las LCA de un solo dominio. No es compatible con las LCA de dominio cruzado. Usa el
Acl.Builder
para establecer el acceso a cada elemento con una LCA. El siguiente fragmento de código, tomado
de la muestra de recorrido completa, permite
todos los usuarios o “principales”
(getCustomerPrincipal()
)
ser “lectores” de todos los artículos
(.setReaders()
)
al realizar una búsqueda.
Debes comprender las LCA con el objetivo de modelarlas de forma adecuada para el repositorio. Por ejemplo, podrías estar indexando archivos dentro de un sistema de archivos que usa algún tipo de modelo de herencia por el cual las carpetas secundarias heredan permisos de las carpetas principales. El modelado de la herencia de LCA requiere información adicional incluida en las LCA de Google Cloud Search
Establece los metadatos de un elemento
Los metadatos se almacenan en un objeto Item
. Para crear un Item
, necesitas un
mínimo de un ID de string único, un tipo de elemento, una LCA, una URL y una versión para el elemento.
En el siguiente fragmento de código, se muestra cómo compilar un Item
con la clase
IndexingItemBuilder
clase auxiliar.
Crea un elemento indexable
Una vez que hayas configurado los metadatos para el elemento, puedes crear la versión indexable real
con el
RepositoryDoc.Builder
En el siguiente ejemplo, se muestra cómo crear un elemento indexable único.
Un objeto RepositoryDoc
es un tipo de
ApiOperation
que realiza la acción
IndexingService.indexItem()
para cada solicitud.
También puedes usar
setRequestMode()
de la
RepositoryDoc.Builder
para identificar la solicitud de indexación como ASYNCHRONOUS
o SYNCHRONOUS
:
ASYNCHRONOUS
- El modo asíncrono da como resultado una latencia de indexación a entrega más prolongada y admite una gran cuota de capacidad de procesamiento para solicitudes de indexación. El modo asíncrono es Se recomienda para la indexación inicial (reabastecimiento) de todo el repositorio.
SYNCHRONOUS
- El modo síncrono reduce la latencia de indexación a entrega y
se adapta a una cuota de capacidad de procesamiento limitada. Se recomienda el modo síncrono para la indexación de actualizaciones y cambios en el repositorio. Si
Si no se especifica, el modo de solicitud predeterminado es
SYNCHRONOUS
.
Próximos pasos
Aquí hay algunos pasos que puedes seguir:
- Implementa
close()
(opcional). para liberar cualquier recurso antes del cierre. - Crea un conector de identidad mediante el SDK de Content Connector (opcional).
Crea un conector de recorrido de grafo mediante el uso de una clase de plantilla
La cola de indexación de Cloud Search se usa para almacenar ID y valores hash opcionales para cada elemento en el repositorio. Un conector de recorrido de grafo envía los IDs de elemento a la cola de indexación de Google Cloud Search y los recupera, uno a la vez, para la indexación de datos. Google Cloud Search mantiene colas y compara contenidos de cola para determinar el estado del elemento, por ejemplo, si un elemento se ha borrado del repositorio. Para obtener más información sobre la cola de indexación de Cloud Search, consulta a La cola de indexación de Google Cloud Search.
Durante el índice, el contenido del elemento se recupera del repositorio de datos y cualquier ID del elemento secundario se envía a la cola. El conector continúa procesando recursivamente los ID principales y secundarios hasta que se controlan todos los elementos.
Esta sección de los documentos hace referencia a los fragmentos de código del ejemplo GraphTraversalSample.
Implementa el punto de entrada del conector
El punto de entrada a un conector es el
main()
. La tarea principal de este método es crear una instancia de la
Application
e invocar su
start()
para ejecutar el conector.
Antes de llamar
application.start()
:
usa el
IndexingApplication.Builder
para crear una instancia de la plantilla ListingConnector
. El
ListingConnector
acepta un
Repository
objeto cuyos métodos implementarás.
En el siguiente fragmento, se muestra cómo
Crea una instancia de ListingConnector
y su Repository
asociado:
En segundo plano, el SDK llama a
initConfig()
después de llamar al método main()
de tu conector
Application.build
El método initConfig()
:
- Llama al
Configuation.isInitialized()
método para asegurarte de que elConfiguration
no se inicializó. - Inicializa un objeto
Configuration
con el par clave-valor proporcionado por Google. pares. Cada par clave-valor se almacena en unConfigValue
dentro del objetoConfiguration
.
Implementa la interfaz Repository
El único propósito de la
El objeto Repository
realiza el recorrido y la indexación del repositorio.
elementos. Cuando usas una plantilla, solo debes anular ciertos métodos dentro del
Repository
para crear un conector de contenido. Los métodos que anulas dependen de la plantilla y de la estrategia de recorrido que usas. Para el
ListingConnector
:
anula los siguientes métodos:
El
init()
. Para configurar e inicializar cualquier repositorio de datos, anula el parámetroinit()
.La
getIds()
. Para recuperar los ID y los valores hash de todos los registros del repositorio, haz lo siguiente: anula el métodogetIds()
.La
getDoc()
. Para agregar nuevos, actualizar, modificar o borrar elementos del índice, anula el parámetrogetDoc()
.(Opcional) El
getChanges()
. Si tu repositorio es compatible con la detección de cambios, anula elgetChanges()
. Se llama a este método una vez por cada recorrido gradual programado (según lo define tu configuración) para recuperar elementos modificados y luego indexarlos.(Opcional) El
close()
. Si necesitas realizar una limpieza del repositorio, anulaclose()
. . Se llama a este método una vez durante el cierre del conector.
Cada uno de los métodos del
El objeto Repository
muestra algún tipo de objeto ApiOperation
. Un ApiOperation
que un objeto realiza una acción en forma de una
IndexingService.indexItem()
para realizar la indexación real de tu repositorio.
Obtén parámetros de configuración personalizados
Como parte del control de la configuración del conector, deberás obtener cualquier
parámetros personalizados del
Configuration
. Por lo general, esta tarea se realiza
Repository
de la clase
init()
.
La clase Configuration
tiene varios métodos para obtener diferentes tipos de datos.
de una configuración. Cada método muestra un objeto ConfigValue
. Luego, deberás
usa la ConfigValue
get()
para recuperar el valor real.
El siguiente fragmento, de
FullTraversalSample
:
se muestra cómo recuperar un
un solo valor de número entero personalizado de un objeto Configuration
:
Para obtener y analizar un parámetro que contenga varios valores, usa uno de los
Analizadores de tipo de la clase Configuration
para analizar los datos en fragmentos separados.
En el siguiente fragmento del conector del instructivo, se usa el elemento
getMultiValue
para obtener una lista de nombres de repositorios de GitHub:
Realiza el recorrido de grafo
Anular
getIds()
para recuperar los IDs y los valores hash de todos los registros del repositorio.
El método getIds()
acepta un punto de control. El punto de control se usa para reanudar la indexación en un elemento específico en caso de que se interrumpa el proceso.
Luego, anula el
getDoc()
para controlar cada elemento de la cola de indexación de Cloud Search.
Envía ID de elementos y valores hash
Anular
getIds()
para recuperar los IDs de artículo y los valores hash de su contenido asociado de las
en un repositorio de confianza. Los ID y pares de valor hash luego se empaquetan en una solicitud de operación push a la cola de indexación de Cloud Search. Por lo general, los ID principales o de raíz se envían primero, seguidos por los ID secundarios hasta que se haya procesado toda la jerarquía de elementos.
El método getIds()
acepta un punto de control que representa el último elemento que se va a
de forma manual. El punto de control se puede usar para reanudar la indexación en un elemento específico en caso de que se interrumpa el proceso. Para cada elemento de tu repositorio, realiza estas
Pasos en el método getIds()
:
- Obtén cada ID de elemento y el valor hash asociado del repositorio.
- Empaqueta cada ID y par de valor hash en un
PushItems
. - Combina cada
PushItems
en un iterador que muestra elgetIds()
. Ten en cuenta quegetIds()
en realidad muestra unCheckpointCloseableIterable
que es una iteración deApiOperation
objetos, cada uno de los cuales representa una solicitud a la API realizada en unRepositoryDoc
como el envío de elementos a la cola.
El siguiente fragmento de código muestra cómo obtener cada ID de artículo y valor hash y
insertarlos en un
PushItems
Un PushItems
es un
Solicitud ApiOperation
para enviar un elemento a la cola de indexación de Cloud Search.
En el siguiente fragmento de código, se muestra cómo usar la
PushItems.Builder
para empaquetar los IDs y los valores hash en un solo envío
ApiOperation
Los elementos se envían a la cola de indexación de Cloud Search para su posterior procesamiento.
Recupera y controla cada elemento
Anular
getDoc()
para controlar cada elemento de la cola de indexación de Cloud Search
Un elemento puede ser nuevo, modificado o sin cambios, o puede no existir más en el repositorio de código fuente. Recupera e indexa cada elemento que sea nuevo o modificado. Quita los elementos del índice que ya no existen en el repositorio de código fuente.
El método getDoc()
acepta un elemento de la indexación de Cloud Search.
Fila. Para cada elemento en la cola, sigue estos pasos en la
Método getDoc()
:
Comprueba si el ID del elemento, dentro de la cola de indexación de Cloud Search, existe en el repositorio. Si no, borra el elemento del índice. Si el elemento existe, sigue con el próximo paso.
Índice modificado o elementos nuevos:
- Configura los permisos.
- Establece los metadatos para el elemento que indexas.
- Combina los metadatos y el elemento en un solo elemento indexable
RepositoryDoc
- Coloca los ID secundarios en la cola de indexación de Cloud Search para su posterior procesamiento.
- Muestra el
RepositoryDoc
.
Controla los elementos borrados
El siguiente fragmento de código muestra cómo determinar si un elemento existe en el índice y, si no, cómo borrarlo.
Configura los permisos para un elemento
Tu repositorio usa una Lista de control de acceso (LCA) para identificar los usuarios o grupos que tienen acceso a un elemento. Una LCA es una lista de ID para grupos o usuarios que pueden acceder al elemento.
Debes duplicar la LCA que usa tu repositorio para garantizar que solo esos usuarios con acceso a un elemento puede verlo en un resultado de la búsqueda. El Se debe incluir la LCA de un elemento cuando se indexa para que Google Cloud Search tenga la información que necesita para proporcionar el nivel de acceso correcto el elemento.
El SDK de Content Connector proporciona un amplio conjunto de métodos y clases de LCA para modelar las LCA de la mayoría de los repositorios. Debes analizar la LCA para cada elemento en tu repositorio y crear una LCA correspondiente para Google Cloud Search cuando indexes un elemento. Si tu LCA del repositorio emplea conceptos como la herencia de la LCA, modelar esa LCA puede ser complicado. Para obtener más información sobre las LCA de Google Cloud Search, consulta LCA de Google Cloud Search.
Nota: La API de indexación de Cloud Search es compatible con las LCA de un solo dominio. No es compatible con las LCA de dominio cruzado. Usa el
Acl.Builder
para establecer el acceso a cada elemento con una LCA. El siguiente fragmento de código, tomado
de la muestra de recorrido completa, permite
todos los usuarios o “principales”
(getCustomerPrincipal()
)
ser “lectores” de todos los artículos
(.setReaders()
)
al realizar una búsqueda.
Debes comprender las LCA con el objetivo de modelarlas de forma adecuada para el repositorio. Por ejemplo, podrías estar indexando archivos dentro de un sistema de archivos que usa algún tipo de modelo de herencia por el cual las carpetas secundarias heredan permisos de las carpetas principales. El modelado de la herencia de LCA requiere información adicional incluida en las LCA de Google Cloud Search
Establece los metadatos de un elemento
Los metadatos se almacenan en un objeto Item
. Para crear un Item
, necesitas un
mínimo de un ID de string único, un tipo de elemento, una LCA, una URL y una versión para el elemento.
En el siguiente fragmento de código, se muestra cómo compilar un Item
con la clase
IndexingItemBuilder
clase auxiliar.
Crea el elemento indexable
Una vez que hayas configurado los metadatos para el elemento, puedes crear la versión indexable real
con el
RepositoryDoc.Builder
En el siguiente ejemplo, se muestra cómo crear un elemento indexable único.
Un RepositoryDoc
es un tipo de ApiOperation
que realiza la acción
IndexingService.indexItem()
.
También puedes usar
setRequestMode()
de la
RepositoryDoc.Builder
para identificar la solicitud de indexación como ASYNCHRONOUS
o SYNCHRONOUS
:
ASYNCHRONOUS
- El modo asíncrono da como resultado una latencia de indexación a entrega más prolongada y admite una gran cuota de capacidad de procesamiento para solicitudes de indexación. El modo asíncrono es Se recomienda para la indexación inicial (reabastecimiento) de todo el repositorio.
SYNCHRONOUS
- El modo síncrono reduce la latencia de indexación a entrega y
se adapta a una cuota de capacidad de procesamiento limitada. Se recomienda el modo síncrono para la indexación de actualizaciones y cambios en el repositorio. Si
Si no se especifica, el modo de solicitud predeterminado es
SYNCHRONOUS
.
Coloca los ID secundarios en la cola de indexación de Cloud Search
El siguiente fragmento de código muestra cómo incluir los ID secundarios, para el elemento principal que se procesa actualmente, en la cola para su procesamiento. Estos ID se procesan después de que se indexa el elemento principal.
Próximos pasos
Aquí hay algunos pasos que puedes seguir:
- Implementa
close()
(opcional). para liberar cualquier recurso antes del cierre. - (opcional) Crea un conector de identidad con el uso del SDK de Identity Connector.
Crea un conector de contenido con la API de REST
Las siguientes secciones explican cómo crear un conector de contenido con la API de REST.
Determina tu estrategia de recorrido
La función primaria de un conector de contenido es recorrer un repositorio y luego indexar sus datos. Debes implementar una estrategia de recorrido en función del tamaño y diseño de los datos en tu repositorio. Las siguientes son tres estrategias de recorrido comunes:
- Estrategia de recorrido completo
Una estrategia de recorrido completo analiza todo el repositorio e indexa a ciegas cada elemento. Esta estrategia se usa comúnmente cuando tienes un repositorio pequeño y puedes permitirte la sobrecarga de realizar un recorrido completo cada vez que indexas.
Esta estrategia de recorrido es adecuada para repositorios pequeños con datos mayormente estáticos y no jerárquicos. También puedes usar esta estrategia de recorrido cuando la detección de cambios es difícil o no es compatible con el repositorio.
- Estrategia de recorrido de lista
Una estrategia de recorrido de lista analiza todo el repositorio, incluidos los nodos secundarios, y determina el estado de cada elemento. Luego, el conector realiza una segunda pasada y solo indexa elementos que son nuevos o que se actualizaron desde la última indexación. Esta estrategia se usa comúnmente para realizar actualizaciones graduales en un índice existente (en lugar de tener que hacer un recorrido completo cada vez que actualizas el índice).
Esta estrategia de recorrido es adecuada cuando la detección de cambios es difícil o no es compatible con el repositorio, cuando tienes datos no jerárquicos y cuando estás trabajando con conjuntos de datos muy grandes.
- Recorrido de grafos
Una estrategia de recorrido de grafos analiza todo el nodo principal y determina el estado de cada elemento. Luego, el conector realiza una segunda pasada y solo indexa elementos en el nodo raíz que son nuevos o que se actualizaron desde la última indexación. Por último, el conector pasa cualquier ID secundario e indexa elementos en los nodos secundarios que son nuevos o que se actualizaron. El conector continúa recursivamente a través de todos los nodos secundarios hasta que se hayan abordado todos los elementos. Este recorrido se usa normalmente para los repositorios jerárquicos donde no es práctico hacer una lista de todos los ID.
Esta estrategia es adecuada si tienes datos jerárquicos que deben ser rastreados, como una serie de directorios o páginas web.
Implementa tu estrategia de recorrido y los elementos de índice
Cada elemento indexable para Cloud Search se conoce como un elemento en la API de Cloud Search. Un elemento puede ser un archivo, una carpeta, una línea en un archivo CSV o un registro de base de datos.
Una vez que se registra tu esquema, puedes propagar el índice de las siguientes maneras:
Usa
items.upload
(opcional) subir archivos de más de 100 KiB para indexarlos. Para archivos más pequeños, inserta el contenido como inlineContent medianteitems.index
Usa
media.upload
(opcional) subir archivos multimedia para indexarlos.Usa
items.index
para indexar el elemento. Por ejemplo, si tu esquema usa la definición del objeto en la película esquema, una solicitud de indexación para un solo el elemento se vería así:{ "name": "datasource/<data_source_id>/items/titanic", "acl": { "readers": [ { "gsuitePrincipal": { "gsuiteDomain": true } } ] }, "metadata": { "title": "Titanic", "viewUrl": "http://www.imdb.com/title/tt2234155/?ref_=nv_sr_1", "objectType": "movie" }, "structuredData": { "object": { "properties": [ { "name": "movieTitle", "textValues": { "values": [ "Titanic" ] } }, { "name": "releaseDate", "dateValues": { "values": [ { "year": 1997, "month": 12, "day": 19 } ] } }, { "name": "actorName", "textValues": { "values": [ "Leonardo DiCaprio", "Kate Winslet", "Billy Zane" ] } }, { "name": "genre", "enumValues": { "values": [ "Drama", "Action" ] } }, { "name": "userRating", "integerValues": { "values": [ 8 ] } }, { "name": "mpaaRating", "textValues": { "values": [ "PG-13" ] } }, { "name": "duration", "textValues": { "values": [ "3 h 14 min" ] } } ] } }, "content": { "inlineContent": "A seventeen-year-old aristocrat falls in love with a kind but poor artist aboard the luxurious, ill-fated R.M.S. Titanic.", "contentFormat": "TEXT" }, "version": "01", "itemType": "CONTENT_ITEM" }
Usa items.get (opcional) llamadas para verificar un elemento se indexó.
Para realizar un recorrido completo, deberías volver a indexar periódicamente el repositorio completo. Para realizar un recorrido de grafo o de lista, debes implementar código para controlar los cambios del repositorio.
Controla cambios de repositorio
Periódicamente, puedes reunir y además indexar cada elemento de un repositorio para realizar una indexación completa. Si bien es efectiva para garantizar que tu índice esté actualizado, una indexación completa puede ser costosa cuando se trata de repositorios jerárquicos o más grandes.
En lugar de usar llamadas al índice para indexar un repositorio completo de vez en cuando, también puedes usar la cola de indexación de Google Cloud como un mecanismo para hacer un seguimiento de los cambios y solo indexar aquellos elementos que han sido modificados. Puedes usar la items.push de envío de elementos a la cola para sondearlos y actualizarlos más tarde. Para ver más para obtener más información sobre la cola de indexación de Google Cloud, consulta Cola de indexación de Google Cloud.
Para obtener más información sobre la API de Google Cloud Search, consulta API de Cloud Search.