from llama_index.llms.ollama import Ollama
from llama_index.embeddings.ollama import OllamaEmbedding
from llama_index.core import Settings
llm = Ollama(base_url=“http://170.5.113.113:11434”, model=“qwen2.5:14b”,)
embed_model = OllamaEmbedding(base_url=“http://170.5.113.113:11434”, model_name=“nomic-embed-text:latest”)
Settings.llm = llm
Settings.embed_model = embed_model
from llama_index.core.vector_stores import ExactMatchFilter, MetadataFilters
from llama_index.core.schema import MetadataMode
from llama_index.core import VectorStoreIndex, StorageContext
from llama_index.vector_stores.milvus import MilvusVectorStore
from llama_index.core import SimpleDirectoryReader
from llama_index.core import Document
Load all the two documents loaded before
documents_novel = SimpleDirectoryReader(input_files=[“…/data/paul_graham_essay.txt”]).load_data()
document_with_metadata = [
Document(
text=doc.text,
metadata={
“file_name”: “paul_graham_essay.txt”,
“position”: [“qq”,“ss”],
“department”: [“all”],
“customer”: [“3”,“2”,‘1’],
“customer_department”: [“all”],
},
excluded_llm_metadata_keys=[“file_name”],
metadata_seperator=“::”,
metadata_template=“{key}=>{value}”,
text_template=“Metadata: {metadata_str}\n-----\nContent: {content}”,
) for doc in documents_novel
]
print(“metadata begin.”)
print(document_with_metadata[0].get_content(metadata_mode=MetadataMode.LLM))
print(document_with_metadata[0].get_content(metadata_mode=MetadataMode.EMBED))
print(“metadata end.”)
vector_store = MilvusVectorStore(
uri=“http://180.5.13.113:1530”, collection_name=‘metadata_demo’,dim=768, overwrite=True
)
storage_context = StorageContext.from_defaults(vector_store=vector_store)
index = VectorStoreIndex.from_documents(document_with_metadata, storage_context)
from llama_index.core.vector_stores import (
MetadataFilters,
MetadataFilter,
FilterOperator,
)
filters = MetadataFilters(
filters=[
MetadataFilter(
key=“position”, operator=FilterOperator.CONTAINS, value=“JAVA”
),
MetadataFilter(
key=“department”, operator=FilterOperator.CONTAINS, value=“all”
),
MetadataFilter(
key=“customer”, operator=FilterOperator.CONTAINS, value=“tj”
),
],
condition_operator=“AND”,
)
print(filters)
query_engine = index.as_query_engine(filters=filters)
res = query_engine.query(
“What challenges did the disease pose for the author?”
)
print(res)