Qdrant向量存储 - 默认Qdrant过滤器¶
示例说明如何直接在您的Retriever / 查询引擎中使用qdrant_client SDK中的过滤器。
In [ ]:
Copied!
%pip install llama-index-vector-stores-qdrant
%pip install llama-index-vector-stores-qdrant
In [ ]:
Copied!
!pip3 install llama-index qdrant_client
!pip3 install llama-index qdrant_client
In [ ]:
Copied!
import openaiimport qdrant_clientfrom IPython.display import Markdown, displayfrom llama_index.core import VectorStoreIndexfrom llama_index.core import StorageContextfrom llama_index.vector_stores.qdrant import QdrantVectorStorefrom qdrant_client.http.models import Filter, FieldCondition, MatchValueclient = qdrant_client.QdrantClient(location=":memory:")from llama_index.core.schema import TextNodenodes = [ TextNode( text="りんごとは", metadata={"author": "Tanaka", "fruit": "apple", "city": "Tokyo"}, ), TextNode( text="Was ist Apfel?", metadata={"author": "David", "fruit": "apple", "city": "Berlin"}, ), TextNode( text="Orange like the sun", metadata={"author": "Jane", "fruit": "orange", "city": "Hong Kong"}, ), TextNode( text="Grape is...", metadata={"author": "Jane", "fruit": "grape", "city": "Hong Kong"}, ), TextNode( text="T-dot > G-dot", metadata={"author": "George", "fruit": "grape", "city": "Toronto"}, ), TextNode( text="6ix Watermelons", metadata={ "author": "George", "fruit": "watermelon", "city": "Toronto", }, ),]openai.api_key = "YOUR_API_KEY"vector_store = QdrantVectorStore( client=client, collection_name="fruit_collection")storage_context = StorageContext.from_defaults(vector_store=vector_store)index = VectorStoreIndex(nodes, storage_context=storage_context)# 直接使用qdrant_client python库中的过滤器# 在此处查看更多信息的python示例 https://qdrant.tech/documentation/concepts/filtering/filters = Filter( should=[ Filter( must=[ FieldCondition( key="fruit", match=MatchValue(value="apple"), ), FieldCondition( key="city", match=MatchValue(value="Tokyo"), ), ] ), Filter( must=[ FieldCondition( key="fruit", match=MatchValue(value="grape"), ), FieldCondition( key="city", match=MatchValue(value="Toronto"), ), ] ), ])retriever = index.as_retriever(vector_store_kwargs={"qdrant_filters": filters})response = retriever.retrieve("Who makes grapes?")for node in response: print("node", node.score) print("node", node.text) print("node", node.metadata)
import openaiimport qdrant_clientfrom IPython.display import Markdown, displayfrom llama_index.core import VectorStoreIndexfrom llama_index.core import StorageContextfrom llama_index.vector_stores.qdrant import QdrantVectorStorefrom qdrant_client.http.models import Filter, FieldCondition, MatchValueclient = qdrant_client.QdrantClient(location=":memory:")from llama_index.core.schema import TextNodenodes = [ TextNode( text="りんごとは", metadata={"author": "Tanaka", "fruit": "apple", "city": "Tokyo"}, ), TextNode( text="Was ist Apfel?", metadata={"author": "David", "fruit": "apple", "city": "Berlin"}, ), TextNode( text="Orange like the sun", metadata={"author": "Jane", "fruit": "orange", "city": "Hong Kong"}, ), TextNode( text="Grape is...", metadata={"author": "Jane", "fruit": "grape", "city": "Hong Kong"}, ), TextNode( text="T-dot > G-dot", metadata={"author": "George", "fruit": "grape", "city": "Toronto"}, ), TextNode( text="6ix Watermelons", metadata={ "author": "George", "fruit": "watermelon", "city": "Toronto", }, ),]openai.api_key = "YOUR_API_KEY"vector_store = QdrantVectorStore( client=client, collection_name="fruit_collection")storage_context = StorageContext.from_defaults(vector_store=vector_store)index = VectorStoreIndex(nodes, storage_context=storage_context)# 直接使用qdrant_client python库中的过滤器# 在此处查看更多信息的python示例 https://qdrant.tech/documentation/concepts/filtering/filters = Filter( should=[ Filter( must=[ FieldCondition( key="fruit", match=MatchValue(value="apple"), ), FieldCondition( key="city", match=MatchValue(value="Tokyo"), ), ] ), Filter( must=[ FieldCondition( key="fruit", match=MatchValue(value="grape"), ), FieldCondition( key="city", match=MatchValue(value="Toronto"), ), ] ), ])retriever = index.as_retriever(vector_store_kwargs={"qdrant_filters": filters})response = retriever.retrieve("Who makes grapes?")for node in response: print("node", node.score) print("node", node.text) print("node", node.metadata)