grasys blog

Qdrant (ベクトルデータベース)を試してみた

はじめに

こんにちは。2023年09月に grasys に入社したミャンマー出身のスースーです。データベースについては以前リレーショナルデータベースを使った経験があります。例えば MySQL、PostgreSQL、Oracle Database、IBM Db2 など色々なデータベースを使ったことがあります。私は常に新しい技術を使うことに興味を持っています。

私は grasys に入社してからベクトルデータベースのことを初めて知りました。grasys では新しい技術を使用したプロジェクトが沢山行われているため、新しい技術を利用したプロジェクトに興味がある人なら grasys に合っていると思います。

現在 AI はとても注目されていますよね。AI は今後ますます普及していくことが予測されており、AI に興味がある人は多いと思います。AI では後ろ側の仕組みにベクトルデータベースが使われることが多く、その中でも注目度の高い Qdrant について今回は書かせていただきます。

Qdrant とは?

Qdrant はベクトルデータベースと言われており、主に AI アプリケーションの後ろ側などで使われています。データをベクトルで保存しており、従来のキーワード検索に比べてより高速で、より関連性の高い結果を生成できます。

今回は、Qdrant を用いてデータベースから類似アイテムの抽出を行った事例を紹介します。

Qdrant データベースを使用する理由

ベクトルデータベースといっても下記のように様々な種類があります。

  • Pinecone
  • Milvus
  • Chroma
  • Qdrant
  • Faiss
  • Annoy
  • Elasticsearch

今回は Milvus、Annoy、Qdrant について調べてみました。

Milvus は、項目作成や Collection 作成やダッシュボードが Qdrant よりわかりにくいと感じました。Collection を作成する場合は、項目は文字列、整数などを決めて作成する必要があります。

Annoy は、書き方は簡単ですが、参考になるドキュメントが少なく自分で試しながら調べる必要があると思います。

Qdrant は、Web の管理コンソールが付属しており項目作成や Collection 作成、データベースの Backup など、どれも簡単に行うことができ、ダッシュボードも非常に分かりやすくなっています。

データベースの項目はエクセルで作成したデータをインポートするだけで自動で作成されます。

データの更新も簡単に行うことができます。同じデータがある場合は、自動で更新されるため、追加でコードを書く必要はありません。また、同じデータがない場合は、新しいワードとして自動的にデータベースに追加されます。

Qdrant のデータベースは様々な言語にサポートされています。例えば Python、TypeScript、Java、Rust をサポートしています。

ベクトルデータベースの中で Qdrant は参考になるドキュメントも多く存在しており、今回のプロジェクトにも合っているため Qdrant を選択することにしました。

これから Qdrant について説明させていただきます。

Qdrant の良いところ

Qdrant の良いところはまずデータベースの項目を作成することが簡単なことです。また、大量のデータを高速に処理することが可能で、データの取得や検索も簡単に行うことができます。

ダッシュボードが分かりやすい点も高評価です。

Qdrant はオープンソースプロジェクトで誰でも使用することが可能です。

Qdrant の類似性とセマンティック検索は、距離メトリックを通じてデータベース内で最も類似したベクトルを見つけることを意味します。

Qdrant を docker でインストールする方法

Qdrant は docker image が公開されているので、簡単に使い始めることができます。

まず下記の URL から docker をインストールします。

https://docs.docker.com/desktop/install/mac-install/

docker をインストール後に Qdrant をインストールするためコマンドで下記を実行します

$ docker run -p 6333:6333 -p 6334:6334 \
-v $(pwd)/qdrant_storage:/qdrant/storage:z \
qdrant/qdrant

下記は実行コマンドの結果画像です。

ローカルで実行しているのでリンクは localhost になっています。

下記は Qdrant のダッシュボードです。こんな感じで見られます。

Qdrant を Python で実行する方法

Qdrant は Python、TypeScript、Java、Rust 色々言語をサポートしていますが、今回は Python で実行し、説明していきます。

grasys ではエンジニアは基本的に macbook なので、rye を利用して構成します。

まず自分のプロジェクトフォルダを作成して rye を実行しましょう。

$ mkdir grasysBlog
$ cd grasysBlog
$ rye init
$ rye sync

Qdrant は Collection に保存しています。まず Collection を作成しましょう。

Python で書くので Python ファイルを作成します。

$ touch create_collection.py

create_collection.py ファイルに下記を書きます。

vector の size は自分が使ってるモデルに合わせることが必要です。

Bert Japanese モデルを使うので、自分が使ってる Bert Japanese モデル vector の size である768を入れます。

Qdrant の distance も何を使うのかを決めます。Qdrant distance は4つあります。

  • Dot Product : dot
  • Cosine similarity: Consine
  • Euclidean distance: Euclid
  • Manhattan distance: Manhattan

distance を Euclid で実行してみましょう。


from qdrant_client import models, QdrantClient
#dockerにQdrantのポート番号は6333で実行しているので6333を入れる
client = QdrantClient("localhost", port=6333)

client.recreate_collection(
    collection_name="dictionary_data", # 作成したいcollectionの名前をいれる
    vectors_config=models.VectorParams(
        size=768, # ベクトルサイズは使用するモデルによって定義される
        distance=models.Distance.EUCLID, # Euclidean distanceを入れる
    ),
)

Qdrant を使うために rye で qdrant_client をインストールします。

$ rye add qdrant_client
$ rye sync
$ rye run python create_collection.py

Qdrant に Collection を作成しました。ダッシュボードで作成した Collection が見れるようになりました。

Qdrant を Bert Japanese で実行する方法

Qdrant のベクトルデータベースは Bert Japanese を使って書いてるコードがあまりないので Bert Japanese を使って Qdrant を説明します。

日本語の言葉をベクトルで作成します。ベクトルで作成する場合、色々なモデルがありますが日本語の言葉を検索しますので Hugging Face の Bert Japanese モデルを使用します。

Bert Japanese 参照 https://huggingface.co/docs/transformers/en/model_doc/bert-japanese

Qdrant の Collection を作成しました。この Collection にデータを登録します。

$ touch upload_collection.py

upload_collection ファイルに下記のコードを入れます。

from qdrant_client import models, QdrantClient
import pandas as pd
from transformers import AutoModel, AutoTokenizer

#bert japanese modelを使ってvector databaseにデータをインポートする。
bertjapanese = AutoModel.from_pretrained("cl-tohoku/bert-base-japanese-v3")
tokenizer = AutoTokenizer.from_pretrained("cl-tohoku/bert-base-japanese-v3")

client = QdrantClient("localhost", port=6333)

#エクセルファイルのデータをインポートする
df = pd.read_excel('./japan_words.xlsx')
#dictionaryに変換する
myDict = df.to_dict('records')

# bert japaneseで日本語言葉をベクトルで変換してQdrant Collection にデータ登録する
client.upload_records(
    #インポートしたいcollectionの名前を記入する
    collection_name="dictionary_data",
    #bert japaneseモデルはdimension = 768なので768ベクトルでデータ登録する
    records=[
        models.Record(
            id=idx, vector=bertjapanese(**tokenizer(doc["word"], return_tensors="pt"))[0][0][0], payload=doc
        )
        for idx, doc in enumerate(myDict)
    ],
)

print ("データ登録成功になりました。")

作成したフォルダの中にエクセルファイルを入れ、移行したいデータと項目を作成します。

今回は grasysBlog フォルダへ japan_words エクセルファイルを入れています。

$ rye add pandas
$ rye add transformers
$ rye add torch
$ rye add fugashi
$ rye add unidic_lite
$ rye add openpyxl
$ rye sync

upload_collection.py ファイルを実行します。

$ rye run python upload_collection.py

Qdrant に dictionary_data の Collection にデータが登録されました。
Collection データの情報を「INFO」で確認出来ます。

Collection データを「POINT」で見られます。

japan_word エクセルを項目通りに Qdrant データベースへ入れます。

ベクトルの長さは768で作成したので長さは768になりました。

「為る」という言葉が768 ベクトルに変換されてデータベースに登録されています。

それぞれのベクトルを見たいなら「Default vector」の横をクリックして見ることができます。

下記は「為る」のベクトルです。

[0.13376483,-1.1917309,0.22067592,0.11428742,-0.6930485,-0.24618417,-0.36651778,0.123042226,0.36512792,0.34743798,0.807078,-0.20809682,-1.5792682,0.1339413,-0.56645554,0.26140338,1.0571457,-0.6480525,-0.31382358,-0.043356296,0.9822589,-0.01743687,-0.5071755,-0.6413115,0.13182585,-0.43669254,0.027566612,0.88564324,-0.13164099,0.049376592,0.56012547,-0.67230326,-0.22466154,-7.8824944,-0.21918319,-0.08328795,0.12957871,-0.745496,0.754595,0.08258175,-0.065016225,-1.0508345,-0.39972588,0.046826594,-0.64328957,-0.16481316,0.14647904,0.21234201,-0.30813533,-0.08390335,-0.07450299,3.698843,0.57981896,-0.60699314,0.03829495,0.9667942,-0.54494375,1.7625751,0.039743766,0.3821696,0.10237554,0.5418371,-0.12933841,0.25056255,-0.17445108,-0.38482448,-0.11604282,-0.111270614,-0.42233163,0.88078076,0.5996243,-0.14643261,0.5668672,0.04433996,1.568854,0.31130648,1.0808531,-0.7014801,-0.27043203,0.24129462,0.33841425,-0.53984904,0.16642408,0.009823027,0.37390092,0.19060968,0.30857348,-0.27710977,0.31564838,-0.33210275,-0.33092725,-1.2969366,1.0145975,-0.06364387,-0.4153044,0.02769433,0.1222056,-0.5786021,0.9167172,0.20906761,-0.82710874,-0.25136462,-0.6994396,-1.268826,0.2849995,0.8152854,-0.041414134,0.8810486,0.13371554,-0.25771794,-0.06321154,-0.08459162,0.49760854,0.24257614,0.77688706,0.09951899,0.030303068,-0.464243,0.2305815,-1.023106,0.11413629,0.2628832,-0.35287988,-0.20406705,-0.5433545,1.4757599,-0.36572102,-0.27729678,-0.48256186,0.46470723,-0.08798429,0.1714748,0.99782693,0.71477056,0.20520124,-0.2603001,0.8388146,0.58056194,0.064090215,-0.26995596,0.83652,-0.12272916,-0.8591515,-0.34300664,-0.5731224,0.5002971,0.6943321,0.6904327,-0.0342771,0.1620523,-0.43530637,-0.03143981,-0.43904823,0.8303916,0.72936183,-0.3197605,-0.21883038,0.09977339,1.2728635,-0.8961127,-0.02240556,0.69932836,-0.11520073,0.32247478,0.7970629,-0.38920063,-0.5584721,-0.06451584,-0.5433184,0.055037208,0.18005061,-0.30664518,-0.039403517,0.3975253,0.31936744,-0.26452452,-0.30558932,-1.9192051,-0.41272148,0.6459612,-0.09977619,1.3608809,-0.06362962,-0.09210475,-1.7139775,-0.12237496,-1.0927767,0.22247976,-1.6036245,0.4777577,0.19863659,-0.11486916,0.8878561,0.26072282,-0.51947033,-0.37086487,0.20901696,0.38499197,-0.17421348,-0.08299765,-0.19504768,-0.23755178,0.42499295,-0.8025341,-0.30163747,0.2570232,-0.57802606,0.0786429,-1.1545012,-0.94432473,-0.4155108,0.12627792,-0.32514876,-0.2587845,0.014779083,0.3361451,-0.7961073,0.02052157,0.68996197,-0.2749563,0.7927061,0.318234,-0.55228686,-0.31802163,-0.119928144,0.84736925,0.35184863,-0.0067386776,-0.7389148,-0.16230373,-0.014882054,-0.24874635,-0.48020613,-0.58826303,-0.3019842,0.118759565,1.2659543,-0.66225874,1.3745364,-0.7543984,-0.07068502,0.20280714,1.5532218,-1.1727129,0.7961243,-0.15030138,-0.6367871,0.6611429,0.37503758,0.21034405,0.039658755,-0.088518925,-0.32635492,-0.47017923,-0.547698,-0.08569347,-0.2918628,0.5302027,0.0064029293,0.6145501,0.097174704,-0.6763096,-0.5250366,-0.38990438,0.2214452,-0.47160885,0.07727856,-0.27969843,-0.5721338,0.6509766,0.96760345,-0.003992442,0.7313319,0.13134947,0.59374017,1.5005627,-0.96649307,-0.717615,-0.87890196,0.09687099,-0.705341,-0.7627102,0.24999014,-0.01933695,0.5030411,0.3742839,0.7945006,0.3258282,-0.02505771,-0.024540275,-1.4058102,1.1755644,0.31435215,-0.7930072,-0.3745591,0.080298536,1.0241399,0.16388163,0.817444,0.15607063,-1.0256174,-0.036358416,-0.38190207,-0.69007754,0.0957237,0.18091676,0.30411172,0.13905066,-0.221821,0.4038826,0.33661783,0.38047487,-0.555102,0.7660116,-0.08172868,0.5215573,0.73630714,0.7896609,0.6492673,0.41599768,0.22806004,-0.49440646,-0.012241898,0.93048817,-0.2508368,-0.07190633,-0.23756507,-1.0949658,0.301731,-0.17378879,-0.98055774,-0.34110624,0.17793301,-0.60919935,-0.29505825,-0.48592323,-0.39102912,0.5672159,-0.5135362,-0.06960659,-0.46239156,-0.5631616,0.40778384,0.20714211,-0.15953337,-0.3791777,-0.20854026,0.48184854,-1.1642581,0.04470022,-0.107497886,-1.1268867,-0.60255635,-1.5889623,-1.3144149,-0.26171288,0.40190548,0.6152675,-0.08067866,0.47177038,0.5596237,-0.47432375,1.0262704,-0.34569144,0.99867725,-0.8516065,0.40784,0.47855833,1.1796447,0.10541025,0.29920787,-0.21786283,-0.2710203,-0.19525439,-0.56515557,0.41829792,-0.67459506,-0.264892,0.48307824,0.15284224,0.39240676,0.19094005,-0.8609366,-0.646627,-0.43455708,0.4536449,0.025301129,0.49245754,-0.48035458,-0.059705257,-0.1904106,-0.3441976,0.51003814,-0.17539194,-0.55499554,-0.42341778,-0.041170426,0.23031002,0.20236838,0.7171032,0.121558346,0.05811038,0.005123621,-0.45028827,-0.3856617,-1.0752673,1.0758353,0.43017986,1.4036239,0.2816316,-0.8202943,0.33619446,0.2687333,-0.7188837,0.4080723,-0.63614786,0.059324384,0.6923518,0.85231364,0.267143,-0.16858067,0.45603174,0.32629794,-0.9102438,-0.030772775,0.5183837,0.1346255,0.83330995,0.46910185,-0.17998677,-0.21394233,0.20159313,-0.005809787,0.47059882,-0.5706492,0.3329083,0.5659568,0.11668882,1.0394536,0.23630536,-0.5726323,0.5090641,-0.7606674,0.4606335,0.23659876,0.33429924,-0.019854262,0.12625769,-0.014252033,0.05989037,-0.5386262,0.11144449,-0.09233107,-0.9956364,0.09867968,0.45237565,-0.5650121,0.53681636,-0.6952965,1.0323672,-0.19988924,-1.3918872,-0.46281946,-1.5833194,-0.65088695,0.29252684,1.0714871,0.33187306,0.31117952,-0.094563894,-0.36033162,-0.30126247,0.03252601,-1.2302893,-0.28132778,-1.130811,-0.47859684,0.8088143,-0.41784614,0.6621712,0.009419672,-0.6920571,0.43028653,0.8922738,0.3148229,0.38014713,-1.0662093,0.67925537,1.5394716,0.13804697,0.76819193,-0.5675085,0.6012953,0.56485325,0.27480263,-0.13585508,0.08343831,0.38475543,-0.2378372,0.2050273,0.21298885,-0.11195455,-0.08604607,-0.05529032,-0.554062,0.24778798,0.5479434,1.2668273,0.4562255,-0.4273507,0.038513318,0.38272884,-0.8282958,0.548559,-0.030776255,0.3543192,-1.0191991,-0.10797345,-0.54432356,-0.6451053,0.107431576,0.33978924,0.5674762,-0.46176693,-0.16625401,-0.14100987,0.118756115,-0.4938583,0.28979754,-0.6296784,0.4461152,-1.7949169,-0.7769011,0.12660107,0.35867453,0.25537014,-0.19651735,-0.1773805,-0.23122849,0.31163335,-1.462959,0.754728,0.11909466,-0.7527699,0.5776247,-0.5158617,0.3910664,0.5288902,-0.4863559,0.27218238,0.11478394,-0.26726294,-0.061969645,0.12128375,-0.20836845,0.61412555,0.14124252,-1.3328755,-0.60637295,-0.36986703,1.61032,0.17130107,0.79508317,0.925233,0.098844826,-0.41872144,-0.96844155,0.13271189,-0.29386365,-0.54405856,-0.35393706,0.28055516,-0.04736965,-0.5960262,0.64482135,0.7808923,-0.5656443,-0.47078595,-0.19245256,0.19741744,1.4017959,-0.035672918,0.68965006,1.2148237,0.021796912,-0.15010554,0.324705,-0.40830195,-0.5680217,-0.32508916,0.49618632,-0.2765894,0.64590067,0.09343395,-0.22926264,-0.17246765,0.39064777,-0.6090242,-0.6228354,-0.121982366,-1.2781626,-0.21557815,-0.43315497,0.29717112,-0.78593457,-0.35498884,0.009104855,0.15530534,0.061900735,0.44329742,-0.7095221,-0.40437117,-0.06988043,-0.6505681,-0.3103853,1.1914182,-0.16306591,-1.6371617,-0.29163924,-0.27641767,-0.13361844,1.0264041,-1.0494814,-0.6300776,0.6247936,-0.666714,0.0068768747,0.15690628,0.42622656,-0.29947656,0.70178795,0.46669117,-0.044912964,0.12987442,-0.14277224,-0.6197467,0.18468702,-0.45562226,-0.32892647,0.4465589,0.116595864,-0.33998153,-0.25985378,-0.78915685,-0.19536294,-0.70429546,0.2528277,-0.027836459,-0.4909705,-0.2553583,-0.9103579,-0.113600135,0.5764334,0.43016845,-0.74765134,-0.28510863,-0.3799324,-0.107411206,-0.27139968,-0.13892564,-0.5915358,-0.42933908,-0.14424145,-0.025715023,-0.6202418,0.7397754,-0.3673306,-0.7939132,-0.40037316,-0.5791771,0.05453252,-0.27013272,-0.7575295,0.024921954,0.38279226,0.031404722,0.91829485,-0.17456178,0.5943366,-0.3423939,-0.4340788,-0.52656746,-0.33257294,0.23258802,-0.12926751,-0.6151768,-1.0729319,-0.67029136,-0.4130605,-0.09155326,-0.3099405,-0.29814506,-0.15838571,-0.19082974,0.034606714,-0.35081583,-1.1233743,-0.8037228,-0.4127974,-0.056904055,-0.34890938,0.3560108,-0.31783447,-0.315983,-0.42014697,-0.23140019,0.557131,-0.06907255,0.34771907,-0.48366943,-1.3510637,-0.08931404,0.05697511,-0.1491495,0.81919146,0.6929789,0.3329687,0.3022847,-0.48653224,-0.29814833,0.3199606,-0.35319254,0.6798518,1.2732296,-0.29929757,-0.14232305,-0.73197883,-0.15342626,0.6044976,0.15671107,-0.53480345,-0.9650273,-1.1982791,0.84298044,-0.20163797,-0.80640817,-0.25272286,0.03544362,0.7634793,0.069109365,-0.4382764,0.17944059,0.6946958,0.70819455,-0.18429181,1.2327822,-0.19528137,-0.18916392,-0.50405884,0.96696717,-0.09262826,-0.52705026,0.65604526,2.0683293,0.23966318,0.31349885,0.1504086,-0.22869466,-0.60133976,0.4407896,-0.4624755,0.47239214,-0.25257432,-0.0031943321,-0.16351135,0.6692938,0.5021144,-0.05114399]

似ている言葉を検索してみます。

$ touch search_japan_word.py

search_japan_word.py ファイルに下記のコードを入れます。


from qdrant_client import models, QdrantClient
from transformers import AutoModel, AutoTokenizer

#dockerにQdrantのポート番号は6333で実行しているので6333を入れる
client = QdrantClient("localhost", port=6333)

#bert japanese modelを使ってcollectionデータを検索する。
bertjapanese = AutoModel.from_pretrained("cl-tohoku/bert-base-japanese-v3")
tokenizer = AutoTokenizer.from_pretrained("cl-tohoku/bert-base-japanese-v3")

#検索したいの言葉を入れる
input_word ="楽しい"

#collectionデータで「楽しい」言葉を検索する。
#limit 3は取得データ三つを取得しますの意味です。
hits_bertjp_eu = client.search(
    collection_name="dictionary_data",
    query_vector=bertjapanese(**tokenizer(input_word, return_tensors="pt"))[0][0][0],
    limit=3,
)
# 結果とスコアで表示する
for bertjp_eu in hits_bertjp_eu:
    print(bertjp_eu.payload, "score:", bertjp_eu.score)
$ rye run python search_japan_word.py

結果は下記の画像です。「楽しい」という言葉を Qdrant データベースにある Collection で検索し、検索条件に合うデータがある場合「score : 0.0」に表示されてます。

検索条件に合った言葉だけ取得することもできます。

取得するためには select_japan_word.py ファイルを作成します。

touch select_japan_word.py

下記のコードを select_japan_word.py ファイルに入れます。

検索対象となるデータだけを取得しますので「MathValue」を利用します。

from qdrant_client import  models,QdrantClient

#dockerにQdrantのポート番号は6333で実行しているので6333を入れる
client = QdrantClient("localhost", port=6333)

# models.FieldConditionは検索したい言葉を入れる、言葉3個検索したいなら3個入れる、
result = client.scroll(
    collection_name="dictionary_data",
    scroll_filter=models.Filter(
        should=[
            models.FieldCondition(
                key="word",
                match=models.MatchValue(value="為る"),
            ),
            models.FieldCondition(
                key="word",
                match=models.MatchValue(value="楽しい"),
            ),
        ]
    ),
)

print(result)
$ rye run python select_japan_word.py

結果は下記の画像です。「為る」と「楽しい」の言葉は Qdrant データベースの dictionary_data Collection の中にあるので結果が出ました。

Qdrant の Collection に項目データの更新も簡単です。

下記は Qdrant の Collection にある「為る」項目の詳細です。

「openness」は2になりましたが、これをダッシュボードから簡単に更新できます。

「save」ボタンを押すことで項目の値が更新されました。

エクセルからでも項目の値を更新できます。

japan_words エクセルファイルで登録された言葉は全部で「91」個あります。

このエクセルファイルの項目値を変更して再度データを登録します。

更新前の Collection の情報です。

japan_words エクセルファイルの「為る」と「居る」の値を変更します。

japan_words エクセルファイルに値を変換後、更新 Python ファイルを実行します。

更新するため python ファイルを実行します。

rye run python upload_collection.py

「為る」と「居る」の値が変更されました。

japan_words エクセルファイルも前のまま「91」個のまま更新されてます。

同じ言葉はそのまま更新され、もしなければ新規の言葉として追加されます。

Qdrant のダッシュボードから Backup することができます。

「SNAPSHOTS」タブから「TAKE SNAPSHOT」をクリックします。

 Backup ファイルが出来ました。

ダウンロードも出来ます。

ダウンロードファイルを新規 Collection に作成してインポートする方法

 Collection 横のボタンをクリックします。

作成したい Collection に名前を入れて「continue」ボタンをクリックします。

ダウンロードファイルを入れます。

japan_words の Collection が追加されました。

情報も Backup した Collection のままになります。

Python コードから Collection を Backup 出来ます。

touch create_snapshot.py
import time
#
from qdrant_client import QdrantClient
import qdrant_client.http.exceptions

client = QdrantClient("localhost", port=6333)
try:
     client.create_snapshot(collection_name="dictionary_data")
except qdrant_client.http.exceptions.ResponseHandlingException as e:
#     # Handle the timeout exception
     print(f"Timeout error occurred: {e}")
     time.sleep(5)  # Adjust the delay as needed

print("Finished snapshot")


rye run python snapshot.py

 Backup した Collection も Python からインポート出来ます。

touch recover_snapshot.py
from qdrant_client import QdrantClient

client = QdrantClient("localhost", port=6333)

#インポートしたい Collection の名前を入れる
#Backup したファイルを入れる
client.recover_snapshot(
    "dictionary_data",
    "http://localhost:6333/collections/dictionary_data/snapshots/dictionary_data-7788850471945845-2023-11-20-07-08-08.snapshot",
)

rye run python recover_snapshot.py

Point の ID でデータを削除することもできます。

下記の Point[0,1] を Python コードで削除します。

touch delete_points.py
from qdrant_client import  models,QdrantClient

client = QdrantClient("localhost", port=6333)

#削除したいpoint idを入れる
client.delete(
    collection_name="dictionary_data",
    points_selector=models.PointIdsList(
        points=[0, 1],
    ),
)

Point[0,1] を削除します。

rye run python delete_points.py

項目の列も Python から追加出来ます。項目の列を Python コードで追加しましょう。

touch payload_data_type.py

項目列の追加前

Point [2,3] の列を追加します。payload_data_type.py ファイルに下記コードを入れます。

from qdrant_client import models, QdrantClient
client = QdrantClient("localhost", port=6333)

#payload中に追加したい列を入れる
client.set_payload(
    collection_name="dictionary_data",
    payload={
        "sympathy": 1.3,
        "stress_prone": 2.3,
        "imaginative": 0.8,
    },
    points=[2, 3],

)
rye run python payload_data_type.py

payload_data_type.py を実行すると Point [2,3] に列が追加されました。「sympathy」「stress_prone」「imaginative」が列追加されたのを確認できます。

Qdrantの参照リンク https://qdrant.tech/documentation/

まとめ

Qdrant について下記を説明してきました。

  • create collection
  • search word
  • select word
  • update word
  • backup collection
  • delete point
  • add column and value

Qdrant と Bert Japanese はまだ情報が少ないので、この記事が学んでる人の助けになれば嬉しいと思っています。


採用情報
お問い合わせ