Closed5
ElasticSearch version8のANN searchを試す
https://www.elastic.co/jp/blog/introducing-approximate-nearest-neighbor-search-in-elasticsearch-8-0 これを試していくゼイ!
installしなきゃ始まらん!ということで入れる。(M1でも何も考えずに動かすことが出来た)
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.1.0-darwin-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.1.0-darwin-x86_64.tar.gz.sha512
shasum -a 512 -c elasticsearch-8.1.0-darwin-x86_64.tar.gz.sha512
tar -xzf elasticsearch-8.1.0-darwin-x86_64.tar.gz
# 立ち上げる
./elasticsearch-8.1.0/bin/elasticsearch
セキュリティ機能が邪魔だったので外す
curlでぱっと試したいだけなのでセキュリティ機能がじゃまになった。
elasticsearch-8.1.0/config/elasticsearch.ymlを編集してセキュリティ機能のオフにした。
xpack.security.enabled: false
セキュリティ機能がデフォルトでオンになっているので少しハマった。
elasticsearchの起動時にpasswordを教えてくれるのでそれをcurl時に指定すれば普通に叩くことが出来ます。
あとSSL証明書のpathを指定して上げる必要もあります。
curl --cacert $(pwd)/elasticsearch-8.1.0/config/certs/http_ca.crt -u elastic:<password> https://localhost:9200
v7だとhttpで普通に叩けたと思うのでちょっとハマりました。
マッピング作成
テストデータを入れるのがめんどいので次元数は2にしている。。
dense_vector
というtypeを使っておけば良いみたい。
curl -H 'Content-Type: application/json' -XPUT http://localhost:9200/ann_playground -d '{
"mappings": {
"properties": {
"vector": {
"type": "dense_vector",
"dims": 2,
"index": true,
"similarity": "l2_norm"
}
}
}
}'
作られていることをcurlで確認
curl -H 'Content-Type: application/json' -XGET http://localhost:9200/ann_playground | jq
適当にデータを入れとく
curl -H 'Content-Type: application/json' -XGET http://localhost:9200/_cat/count/ann_playground
1646790711 01:51:51 0
curl -H 'Content-Type: application/json' -XPOST http://localhost:9200/ann_playground/_doc -d '{"vector": [0, 1]}'
curl -H 'Content-Type: application/json' -XPOST http://localhost:9200/ann_playground/_doc -d '{"vector": [0.2, 0.5]}'
curl -H 'Content-Type: application/json' -XPOST http://localhost:9200/ann_playground/_doc -d '{"vector": [1, 4]}'
検索してみる。
vectorフィールドを指定してベクトルを投げてあげればいい感じに検索出来ます。
curl -H 'Content-Type: application/json' -XGET http://localhost:9200/ann_playground/_knn_search -d '
{
"knn": {
"field": "vector",
"query_vector": [0.2, 0.5],
"k": 10,
"num_candidates": 100
},
"_source": true
}
' | jq
{
"took": 8,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 3,
"relation": "eq"
},
"max_score": 0.5,
"hits": [
{
"_index": "ann_playground",
"_id": "RHfobX8BbIcdEdA3Qyhx",
"_score": 0.5,
"_source": {
"vector": [
1,
4
]
}
},
{
"_index": "ann_playground",
"_id": "QnfobX8BbIcdEdA3Qiji",
"_score": 0.055555556,
"_source": {
"vector": [
0,
1
]
}
},
{
"_index": "ann_playground",
"_id": "Q3fobX8BbIcdEdA3Qygt",
"_score": 0.045682963,
"_source": {
"vector": [
0.2,
0.5
]
}
}
]
}
}
このスクラップは2023/01/28にクローズされました