usearch.clj
1.0.0
Usearch 용 Clojure 래퍼, 벡터를위한 빠른 오픈 소스 검색 및 클러스터링 엔진.
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 " }예제는 예제 디렉토리에서 찾을 수 있습니다.
( 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
경고! usearch.clj는 스레드 안전하지 않으며 여러 스레드에서 동시에 사용하면 JVM이 충돌 할 수 있습니다.
참조
개념적 개요는 https://github.com/phronmophobic/clip.clj/tree/main/examples/wikiart에서 Clojure를 사용하여 Semantic Image 검색을 참조하십시오.
Cloogle Doc Search에서도 사용합니다.
저작권 2024 Adrian Smith. Apache 라이센스 v2.0에 따라 라이센스.