$ pip install weaviate-client
import weaviate
client = weaviate.connect_to_custom(
http_host="localhost",
http_port="8080",
http_secure=False,
grpc_host="localhost",
grpc_port="50052",
grpc_secure=False,
skip_init_checks=True
)
try :
# スキーマ存在確認
if client.collections.exists('WebPage'):
# スキーマ削除
client.collections.delete('WebPage')
# スキーマ作成
# https://weaviate.io/developers/weaviate/manage-data/collections
schema = {
"class": "WebPage",
"properties": [
{
"name": "title",
"dataType": ["text"],
"moduleConfig": {
"text2vec-contextionary": {
"skip": False
}
}
},
{
"name": "author",
"dataType": ["text"],
"moduleConfig": {
"text2vec-contextionary": {
"skip": True
}
}
},
{
"name": "hostname",
"dataType": ["text"],
"moduleConfig": {
"text2vec-contextionary": {
"skip": True
}
}
},
{
"name": "date",
"dataType": ["date"],
"moduleConfig": {
"text2vec-contextionary": {
"skip": True
}
}
},
{
"name": "fingerprint",
"dataType": ["text"],
"moduleConfig": {
"text2vec-contextionary": {
"skip": True
}
}
},
{
"name": "page_id",
"dataType": ["text"],
"moduleConfig": {
"text2vec-contextionary": {
"skip": True
}
}
},
{
"name": "license",
"dataType": ["text"],
"moduleConfig": {
"text2vec-contextionary": {
"skip": True
}
}
},
{
"name": "comments",
"dataType": ["text"],
"moduleConfig": {
"text2vec-contextionary": {
"skip": True
}
}
},
{
"name": "raw_text",
"dataType": ["text"],
"moduleConfig": {
"text2vec-contextionary": {
"skip": False
}
}
},
{
"name": "text",
"dataType": ["text"],
"moduleConfig": {
"text2vec-contextionary": {
"skip": False
}
}
},
{
"name": "language",
"dataType": ["text"],
"moduleConfig": {
"text2vec-contextionary": {
"skip": True
}
}
},
{
"name": "image",
"dataType": ["text"],
"moduleConfig": {
"text2vec-contextionary": {
"skip": True
}
}
},
{
"name": "pagetype",
"dataType": ["text"],
"moduleConfig": {
"text2vec-contextionary": {
"skip": True
}
}
},
{
"name": "filedate",
"dataType": ["date"],
"moduleConfig": {
"text2vec-contextionary": {
"skip": True
}
}
},
{
"name": "source",
"dataType": ["text"],
"moduleConfig": {
"text2vec-contextionary": {
"skip": True
}
}
},
{
"name": "source_hostname",
"dataType": ["text"],
"moduleConfig": {
"text2vec-contextionary": {
"skip": True
}
}
},
{
"name": "excerpt",
"dataType": ["text"],
"moduleConfig": {
"text2vec-contextionary": {
"skip": False
}
}
},
{
"name": "categories",
"dataType": ["text"],
"moduleConfig": {
"text2vec-contextionary": {
"skip": True
}
}
},
{
"name": "tags",
"dataType": ["text"],
"moduleConfig": {
"text2vec-contextionary": {
"skip": True
}
}
}
]
}
client.collections.create_from_dict(schema)
# スキーマ一覧
print(client.collections.list_all())
# スキーマ取得
print(client.collections.get('WebPage'))
# データ登録
# https://weaviate.io/developers/weaviate/manage-data/create
articles = client.collections.get("WebPage")
data = {
"title": "Difyのバージョンが v0.6.11からv0.6.12 に上がったので、Kubernetes で運用しているDifyのバージョンアップを行ってみる | microAI",
"author": None,
"hostname": "microai.jp",
"date": "2024-06-29",
"fingerprint": "b0b37451d481f718",
"id": None,
"license": None,
"comments": "",
"raw_text": "2024/06/28 に v0.6.11 がリリースされていました。Difyは本当に素晴らしいアプリですが、不具合もまだまだ多くあるので、バージョンアップしていきます。 前回から2週間ほどでのバージョンアップ。活発で嬉しいです。 最初に Dify のバージョンアップ中に、(ブログが見づらくなるので省略)...",
"text": "2024/06/28 に v0.6.11 がリリースされていました。Difyは本当に素晴らしいアプリですが、不具合もまだまだ多くあるので、バージョンアップしていきます。\n前回から2週間ほどでのバージョンアップ。活発で嬉しいです。\n最初に\nDify のバージョンアップ中に、、(ブログが見づらくなるので省略)...",
"language": None,
"image": "https://microai.jp/images/ogimage.webp",
"pagetype": None,
"filedate": "2024-07-04",
"source": "https://microai.jp/blog/70b4bf89-fe4b-451f-ac81-2d757fca8b6a",
"source_hostname": "Microai",
"excerpt": None,
"categories": "",
"tags": "microAI,AI,API"
}
# データ整形
data["page_id"] = data["id"]
del data["id"]
# 日付をRFC3339形式に変換
from app.libs.utils import convert_to_rfc3339
data["date"] = convert_to_rfc3339(data["date"])
data["filedate"] = convert_to_rfc3339(data["filedate"])
# データ登録
inserted_uuid = articles.data.insert(data)
webPages = client.collections.get("WebPage")
# データ更新
# https://weaviate.io/developers/weaviate/manage-data/update
webPages.data.update(
uuid=inserted_uuid,
properties={
"language": "ja",
}
)
# 全データ取得
# https://weaviate.io/developers/weaviate/search/basics
response = webPages.query.fetch_objects()
for o in response.objects:
print(o.properties)
# ベクトル検索
# https://weaviate.io/developers/weaviate/search/similarity
from weaviate.classes.query import MetadataQuery
response = webPages.query.near_text(
query="Difyバージョンアップについて",
limit=2,
target_vector="text", # Specify the target vector for named vector collections
return_metadata=MetadataQuery(distance=True)
)
print(response)
for o in response.objects:
print("properties:----------------")
print(o.properties)
print("metadata:----------------")
print(o.metadata)
print("----------------")
# ハイブリッド検索
# https://weaviate.io/developers/weaviate/search/hybrid
from weaviate.classes.query import HybridVector, Move, HybridFusion
response = webPages.query.hybrid(
query="microAI",
vector=HybridVector.near_text(
query="Difyバージョンアップについて"
),
alpha=0.75,
limit=5,
)
print("hybrid response:----------------")
print(response)
# フィルター
# https://weaviate.io/developers/weaviate/search/filters
from datetime import datetime, timezone
from weaviate.classes.query import Filter
filter_time = datetime(2022, 6, 10).replace(tzinfo=timezone.utc)
response = webPages.query.hybrid(
query="microAI",
vector=HybridVector.near_text(
query="Difyバージョンアップについて"
),
alpha=0.75,
limit=5,
filters=Filter.by_property("date").less_than(filter_time)
)
print("hybrid response:----------------")
print(response)
# データ削除
# https://weaviate.io/developers/weaviate/manage-data/delete
delete_result = webPages.data.delete_by_id(
inserted_uuid
)
print("delete_result:----------------")
print(delete_result)
except Exception as e:
print(f"An error occurred: {str(e)}")
finally:
client.close()
Variables | Required | Type | Description |
---|---|---|---|
query | yes | string | search query 検索クエリを指定します。検索したいテキストを入力します。 |
alpha | no | float | weighting for each search algorithm, default 0.75 各検索アルゴリズムの重みを指定します。デフォルト値は0.75です。例えば、BM25とベクトル検索のハイブリッド検索において、alphaを調整することで、どちらのアルゴリズムに重点を置くかを決めることができます。 |
vector | no | [float] | optional to supply your own vector 独自のベクトルを提供する場合に使用します。このベクトルを使用して検索が行われます。通常は、Weaviateが内部でテキストからベクトルを生成しますが、特定のベクトルを使用したい場合に指定します。 |
properties | no | [string] | list of properties to limit the BM25 search to, default all text properties BM25検索を特定のプロパティに限定するためのプロパティリストを指定します。デフォルトでは、すべてのテキストプロパティが対象となります。 ["title", "description"] (特定のプロパティのみを検索対象とする場合) |
fusionType | no | string | the type of hybrid fusion algorithm (available from v1.20.0 )ハイブリッド融合アルゴリズムの種類を指定します。バージョン1.20.0以降で利用可能です。 |
alpha=0.75
の意味は、ベクトル検索の重み(重要度)を 75%、query="microAI" の検索の重みを25%にするという意味です。