usearch.clj
1.0.0
Un envoltorio de Clojure para USEARCH, un motor de búsqueda y agrupación de código abierto rápido para vectores.
com.phronemophobic/usearch-clj { :mvn/version " 1.0 " }
; ; native deps
com.phronemophobic.cljonda/usearch-c-linux-x86-64 { :mvn/version " ce54b814a8a10f4c0c32fee7aad9451231b63f75 " }
com.phronemophobic.cljonda/usearch-c-darwin-aarch64 { :mvn/version " ce54b814a8a10f4c0c32fee7aad9451231b63f75 " }
com.phronemophobic.cljonda/usearch-c-darwin-x86-64 { :mvn/version " ce54b814a8a10f4c0c32fee7aad9451231b63f75 " }Se pueden encontrar ejemplos en el directorio de ejemplos.
( ns simple
( :require [com.phronemophobic.usearch :as usearch])
( :import java.util.Random))
( def random ( Random. 42 ))
( defn rand-vec [dim]
( float-array
( eduction
( map ( fn [_]
( .nextFloat random)))
( range dim))))
( def dim 512 )
; ; Generate 100 sample vectors
; ; integer keys -> vector.
( def vecs
( into {}
( map ( fn [i]
[i ( rand-vec dim)]))
( range 100 )))
( def index
( usearch/init { :dimensions dim
:quantization :quantization/f32 }
; ; vectors to load
vecs))
( count index)
; ; 100
; ; Can check for the presence of keys
( every? #( contains? index %)
( keys vecs))
; ; true
; ; need to reserve more space before adding more vecs
( usearch/reserve index
( + ( usearch/capacity index)
1 ))
( usearch/add index 101 ( rand-vec dim))
( count index)
; ; 101
; ; get closest match
( usearch/search index
( float-array ( range dim)))
; ; returns [key, distance]
; ; [16 -71872.88]
; ; lookup vector for 16
( get index 16 )
; ; #object["[F" 0x4297c486 "[F@4297c486"]
; ; get 10 closest matches
( usearch/search index
( float-array ( range dim))
10 )
; ; [[16 -71872.88] [10 -70801.016] [37 -70298.38] [49 -69604.12] [55 -69434.65] [78 -69195.81] [59 -69186.44] [28 -69116.14] [9 -68563.03] [24 -68498.59]]
; ; Save index to disk
( usearch/save index " simple.usearch " )
; ; Load index from disk
( def index-from-disk
( usearch/init { :dimensions dim
:quantization :quantization/f32 }))
( usearch/load index-from-disk " simple.usearch " )
( count index-from-disk)
; ; 101
¡Advertencia! USEARCH.CLJ no es seguro y puede bloquear el JVM si se usa de varios hilos simultáneamente.
Referencia
Para obtener una descripción general conceptual, consulte la búsqueda de imágenes semánticas con Clojure con código de ejemplo en https://github.com/phronmophobic/clip.clj/tree/main/examples/wikiart.
También utilizado por Cloogle Doc Search.
Copyright 2024 Adrian Smith. Licencia bajo la licencia Apache v2.0.