查找

InterSystems Oficial
· Out. 9, 2024

Búsquedas vectoriales más rápidas con el índice ANN (Aproximate Nearest Network) -- disponible en el Programa de Acceso Anticipado a Vector Search (nueva funcionalidad de búsqueda vectorial)

Recientemente hemos puesto a disposición una nueva versión de InterSystems IRIS en el Programa de Acceso Anticipado a Vector Search (o búsqueda vectorial), que utiliza el índice ANN (Aproximate Nearest Network) basado en el algoritmo de indexación Hierarchical Navigable Small World (HNSW). Esta incorporación permite realizar búsquedas aproximadas de vecinos-más-cercanos (nearest-neighbours) de manera mucho más eficiente, sobre grandes conjuntos de datos vectoriales, mejorando drásticamente el rendimiento de las consultas y la escalabilidad.

El algoritmo HNSW está diseñado para optimizar la búsqueda vectorial en datos con alta dimensionalidad, construyendo una estructura basada en grafos que facilita encontrar vecinos aproximados en grandes colecciones de vectores. Ya sea que estéis trabajando con sistemas de recomendación, procesamiento de lenguaje natural u otras aplicaciones de aprendizaje automático, HNSW puede reducir significativamente los tiempos de búsqueda, permitiéndoos ajustar el nivel de precisión valorando que una mayor exactitud resultará en tiempos de consulta más lentos.

Los beneficios clave de HNSW incluyen:

  • Búsquedas más rápidas incluso a medida que el tamaño del conjunto de datos crece
  • Reducción en el uso de memoria mientras se mantiene una alta precisión
  • Integración sin problemas con las capacidades de búsqueda vectorial existentes en IRIS

Cómo empezar

La última versión ya está disponible a través de nuestro Programa de Acceso Anticipado a Vector Search. Para participar, solo tenéis que registraros, descargar la nueva versión y comenzar a probarla. ¡Vuestros comentarios son fundamentales mientras seguimos mejorando la Búsqueda Vectorial!

Os animamos a explorar las mejoras en el rendimiento y compartir vuestras opiniones con la comunidad. No dudéis en contactarnos si tenéis alguna pregunta o comentario durante la fase de acceso temprano.

¡A programar!

Discussão (0)1
Entre ou crie uma conta para continuar
Artigo
· Out. 9, 2024 3min de leitura

Mejora de la autocompletación de código para variables de referencia de objetos en VS Code ObjectScript

El 29 de agosto de 2024, el equipo lanzó Language Server v2.6.0, que incluye más mejoras para la autocompletación de código (también conocida como intellisense). Eso significa que #dim, aunque sigue siendo útil, ya no es tan necesario. En mi opinión, eso es algo bueno.

Esta publicación del año pasado (Intellisense y autocompletación de código en VS Code ObjectScript) hablaba sobre el uso de #dim para la autocompletación de referencias de objetos (OREFs). #dim siempre ha sido útil tanto para Studio como para VS Code. Pero el año pasado, VS Code ObjectScript estaba ligeramente detrás de Studio en esta área, y #dim ayudaba a cerrar esa brecha. Pero ahora, VS Code ha superado a Studio. Hay autocompletación automática de código para las siguientes variables mostradas en negrita:

  • Variables creadas usando %New() o %OpenId(). set per = ##class(Sample.Person).%New()
  • Variables como argumentos de un método. Method M1(per as Sample.Person)
  • Variables devueltas por un método. set rs = ##class(SQL.Statement).ExecDirect(args)
  • Variables creadas mediante una propiedad de referencia. set owner = account.Owner
  • Variables para %DynamicObject y %DynamicArray. set obj = {}, arr = []
  • ACTUALIZACIÓN 10/2/2024: %Variables que son OREFs que se proporcionan como parte del contexto de un método. Ejemplos: %sqlcontext en un método de clase que usa [SqlProc], %code en un método generador, %session en ciertos métodos llamados desde aplicaciones web. 

Así que #dim ya no es necesario para esos casos. Se me ocurren un par de casos restantes en los que #dim es útil.

El caso de abajo es ahora manejado por una mejora (arreglado el 10/2/2024, disponible poco después).

Cuando se proporciona una variable OREF como parte del contexto de un método. Un ejemplo de esto es cuando un método de clase se declara como un procedimiento almacenado. La variable %sqlcontext se proporciona automáticamente. Usando #dim se habilitará el completado de código para esa variable.

ClassMethod ByPhone(begin As %String = "", dob As %String = "") [ ReturnResultsets, SqlProc ]
{
    #dim %sqlcontext as %Library.ProcedureContext
    <some code>
    do %sqlcontext.AddResultSet(rs)
}

1. Para la variable de excepción en un bloque catch. Hay varias clases de excepción, y es posible hacer clases de excepción personalizadas. El uso de #dim permitirá completar el código correctamente.

    catch ex {
        #dim ex as <some system or custom exception class>
        if ex.DisplayString()
    }

Dato adicional sobre #dim: Sé que algunos equipos de desarrollo prefieren usar #dim para la mayoría o todas las variables (no solo OREFs), utilizándolo para declarar (hacer más claro) el propósito de cada variable. Para esos equipos, también es útil que VS Code ofrezca la opción de hacer clic derecho en una variable y seleccionar "Ir a declaración" para saltar a la declaración de #dim de esa variable, si existe.

¡Hey! Si leíste hasta aquí, prueba la encuesta sobre #dim a continuación.

Que todos vuestros días como desarrolladores sean brillantes y no...

😁

Discussão (0)1
Entre ou crie uma conta para continuar
Anúncio
· Out. 9, 2024

InterSystems at Hack Jak Brno Healthcare Hackathon 2024

⏰ Only 1 day left to register as a participant at Hack jak Brno 🩺💻

Don't miss the opportunity to be there where the future of healthcare is being created and compete for attractive prizes, including 50,000 CZK for the top 3 teams! 💰

📅 Event dates: 1 - 3 November 2024
📍 Location: Faculty of Medicine MU and Faculty of Medicine Brno
🔗 Register at www.hackjakbrno.cz 🚀

 

We’re excited to announce that InterSystems will be participating as an event partner at Hack jak Brno, the national hackathon organized by our amazing long time partner Insane Business Ideas, focused on tackling real-world challenges in healthcare! 🎉

Over two days, students, experts, and enthusiasts from across the Czech Republic will come together to develop innovative solutions aimed at improving patient care and enhancing the efficiency of healthcare services. Combining technological and medical expertise, this event offers an incredible opportunity for participants to make a meaningful impact in the healthcare space. 🏥💡

We’re proud that colleagues from our team will also be there to mentor participants, alongside leading medical experts, technology innovators, and experienced developers. 🙌 They’ll be helping to shape the next generation of healthcare solutions in an inspiring, hands-on environment. 🌟

Interested in joining the challenge? You can apply for free! Whether as an individual or a team of 2-4 members. The registration closure is scheduled for 10.10.2024 at midnight. You can always find the updated schedule at www.hackjakbrno.cz.

Let’s shape the future of healthcare together! 💻🩺

Discussão (0)1
Entre ou crie uma conta para continuar
Discussão (0)1
Entre ou crie uma conta para continuar
Artigo
· Out. 9, 2024 4min de leitura

Accès au stockage d'objets blob Azure

L'accès à un stockage cloud Azure pour charger/télécharger des blobs est assez simple à l'aide des méthodes API de classe %Net.Cloud.Storage.Client désignées ou des adaptateurs entrants/sortants EnsLib.CloudStorage.*.

Notez que vous devez avoir le serveur de %JavaServer External Language opérationnel pour utiliser l'API ou les adaptateurs de stockage cloud, car ils utilisent tous deux le framework PEX à l'aide du serveur Java.

Voici un bref résumé :

L'accès à Azure Blob Storage s'effectue à l'aide d'une chaîne de connexion qui ressemble à celle-ci :

DefaultEndpointsProtocol=https;AccountName=abcdefscleanisr;AccountKey=n3mWskdjgfhklsghdfjaskhgkjdfizqMWJ5X2L4JpqeEJk/FuEnw0rPI6E/rULPn0V5BWgFw+AStRJZlYQ==;EndpointSuffix=core.windows.net

Divisez-le en lignes avec « ;» comme délimiteur et enregistrez-le sous forme de fichier texte :

DefaultEndpointsProtocol=https;
AccountName=abcdefscleanisr;
AccountKey=n3mWskdjgfhklsghdfjaskhgkjdfizqMWJ5X2L4JpqeEJk/FuEnw0rPI6E/rULPn0V5BWgFw+AStRJZlYQ==;
EndpointSuffix=core.windows.net

Pour cet exemple, je nommerai ce fichier « MyAzureStorage.txt ».

Activons maintenant l'API :

set file="C:\Storage\MyAzureStorage.txt"
set endpoint="abcdefscleanisr.privatelink.blob.core.windows.net"
set tStatus=""

Dans la méthode API CreateClient, le deuxième paramètre est le fournisseur de cloud :

  • 0 - Amazon S3
  • 1 - Azure Blob
  • 2 - Google Cloud Storage
SET myClient = ##CLASS(%Net.Cloud.Storage.Client).CreateClient(,1,file,0,.tStatus,endpoint)

Une fois le client établi (tStatus=1), vous pouvez exécuter n’importe laquelle des méthodes du client :

 

Dans Azure Blob Storage, un bucket est un conteneur.

Par exemple, pour obtenir la liste des conteneurs Azure, exécutez la méthode ListBuckets :

set list=myClient.ListBuckets()

for i=1:1:list.Count() {write list.GetAt(i).name,!}

clean
dirty

Une fois que vous avez un nom de conteneur (prenons le conteneur « clean » comme exemple), vous pouvez obtenir la liste des blobs qu'il contient :

set list=myClient.ListBlobs("clean")

for i=1:1:list.Count() {write list.GetAt(i).name,!}

4caa6f29-e9e6-4cde-9112-65ec28d4eded.jpeg
2374233-e9e6-4cde-9112-65ec28d4eded.jpeg
3klfd3lld-e9e6-4cde-9112-65ec28d4eded.jpeg
4caa6f29-e9e6-87ry-9112-65ec28d4eded.jpeg

L'adaptateur sortant CloudStorage dispose de moins d'options : ses méthodes incluent uniquement les éléments suivants :

  • UploadBlobFromString(bucketName,blobName,content)
  • UploadBlobFromStream(bucketName,blobName,content)
  • UploadBlobFromFile(bucketName,blobName,filePath)
  • DeleteBlob(bucketName,blobName)

Voici les paramètres permettant de configurer une opération commerciale à l'aide de EnsLib.CloudStorage.OutboundAdapter avec Azure Blob Storage. Le paramètre Storage Région n'est pas pertinent pour Azure Blob Storage.

Tous les autres paramètres sont pertinents de la même manière que lorsque nous utilisions la méthode CreateClient :

Le paramètre ContainerName ne fait pas partie des paramètres de l'adaptateur : il n'est pas nécessaire pour créer le client (la méthode CreateClient ne l'utilise pas).

Toutefois, toutes les autres méthodes d'adaptateur répertoriées ci-dessus doivent spécifier dans quel bucket/conteneur le blob doit être chargé, il est donc logique de l'ajouter en tant que paramètre dans le cadre des paramètres :

Class Sasa.BO.Storage Extends Ens.BusinessOperation
{ 
Parameter ADAPTER = "EnsLib.CloudStorage.OutboundAdapter"; 
Property Adapter As EnsLib.CloudStorage.OutboundAdapter; 
Parameter INVOCATION = "Queue"; 
/// Bucket name(Amazon) = Container name(Azure)
Property ContainerName As %String(MAXLEN = 1000); 
Parameter SETTINGS = "ContainerName:Cloud Storage"; 
Method CreateFile(pRequest As Cloud.RES.REST, Output pResponse As Cloud.RES.REST) As %Status
{
    #dim tException As %Exception.SystemException
    Set tStatus = $$$OK
    set pResponse=##class(Cloud.RES.REST).%New() 
    Try {
        Set tStatus = ..Adapter.DeleteBlob(..ContainerName, pRequest.FileName)
        Set tStatus = ..Adapter.UploadBlobFromStream(..ContainerName, pRequest.FileName, pRequest.FileData)   
        if $$$ISERR(tStatus) {
            set pResponse.Success = 0
            set pResponse.ErrorMessage = $system.Status.GetErrorText(tStatus)
        }
    } 
    Catch tException {
        Set tStatus = tException.AsStatus()
        set pResponse.Success=0
        set pResponse.ErrorMessage=$system.Status.GetErrorText(tStatus)
    }
    Quit $$$OK
}

J'espère que cela vous aidera à commencer à utiliser l'adaptateur cloud avec Azure.

Discussão (0)1
Entre ou crie uma conta para continuar