01
核心能力:
-
内置分词器,无需额外预处理:通过内置分词器(Analyzer)与稀疏向量提取能力, 可直接接受文本输入,自动完成分词、停用词过滤与稀疏向量提取,无需依赖外部模型(如BGE-M3等)。 -
实时 BM25 统计:数据插入时动态更新词频(TF)与逆文档频率(IDF),确保搜索结果的实时性与准确性。 -
混合搜索性能增强:基于近似最近邻(ANN)算法的稀疏向量检索,性能远超传统关键词系统,支持亿级数据毫秒级响应,同时兼容与稠密向量的混合查询。
典型应用场景 :
-
法律文档库中的快速定位特定条款中的专业术语等罕见词。 -
电商平台结合商品描述的关键词与语义特征,提升搜索相关性,兼顾召回率与精确性。
-
创建 Collections:设置带有必要字段的 Collections,并定义一个将原始文本转换为稀疏向量的函数 -
插入数据:将原始文本文档插入 Collections -
执行搜索:使用查询文本搜索你的 Collections 并检索相关结果
from pymilvus import MilvusClient, DataType, Function, FunctionType
client = MilvusClient(uri="http://localhost:19530")
# 定义 Collection
# id:作为主键,由auto_id=True 自动生成
# text:存储原始文本数据,用于全文搜索操作。数据类型必须是VARCHAR ,因为VARCHAR 是 Milvus 用于文本存储的字符串数据类型。设置enable_analyzer=True 以允许 Milvus 对文本进行标记化
# sparse:矢量字段:预留矢量字段,用于存储内部生成的稀疏嵌入,以进行全文搜索操作。数据类型必须是SPARSE_FLOAT_VECTOR
schema = client.create_schema()
schema.add_field(field_name="id", datatype=DataType.INT64, is_primary=True, auto_id=True)
schema.add_field(field_name="text", datatype=DataType.VARCHAR, max_length=1000, enable_analyzer=True)
schema.add_field(field_name="sparse", datatype=DataType.SPARSE_FLOAT_VECTOR)
# 定义一个将文本转换为稀疏向量表示的函数
bm25_function = Function(
name="text_bm25_emb", # Function name
input_field_names=["text"], # Name of the VARCHAR field containing raw text data
output_field_names=["sparse"], # Name of the SPARSE_FLOAT_VECTOR field reserved to store generated embeddings
function_type=FunctionType.BM25,
)
schema.add_function(bm25_function)
# 向量配置索引
index_params = client.prepare_index_params()
index_params.add_index(
field_name="sparse",
index_type="AUTOINDEX",
metric_type="BM25"
)
# 创建 Collections
client.create_collection(
collection_name='demo',
schema=schema,
index_params=index_params
)
# 插入文本数据
client.insert('demo', [
{'text': 'information retrieval is a field of study.'},
{'text': 'information retrieval focuses on finding relevant information in large datasets.'},
{'text': 'data mining and information retrieval overlap in research.'},
])
# 执行全文搜索
search_params = {
'params': {'drop_ratio_search': 0.2},
}
client.search(
collection_name='demo',
data=['whats the focus of information retrieval?'],
anns_field='sparse',
limit=3,
search_params=search_params
)
02
核心能力:
-
词项预处理:利用分词器与索引技术,对文本进行标准化处理(如大小写转换、词干提取)。 -
混合查询模式:在向量相似性搜索的基础上,叠加标量条件过滤(如“日期 > 2023”),实现多维度精准检索。 -
性能优化:索引构建与查询执行效率提升,满足高并发场景下的低延迟需求。
典型应用场景:
-
新闻平台中按标题关键词+时间范围过滤,快速定位相关报道。 -
企业知识库中结合员工ID与文档关键词,实现权限内的精确检索。
实现本文匹配的代码示例如下, 如若配置文本分析器后续便可 结合标量过滤功能做文本匹配过滤以细化查询结果:
from pymilvus import MilvusClient, DataType
schema = MilvusClient.create_schema(auto_id=True, enable_dynamic_field=False)
schema.add_field(
field_name='text',
datatype=DataType.VARCHAR,
max_length=1000,
enable_analyzer=True, # 是否启用该字段的文本分析
enable_match=True # 是否启用文本匹配
)
analyzer_params={
"english" :
}
schema.add_field(
field_name='text',
datatype=DataType.VARCHAR,
max_length=200,
enable_analyzer=True,
analyzer_params=analyzer_params,
enable_match=True,
)
# Match entities with `keyword1` or `keyword2`
filter = "TEXT_MATCH(text, 'keyword1 keyword2')"
result = MilvusClient.search(
collection_name="YOUR_COLLECTION_NAME",
anns_field="embeddings",
data=[query_vector],
filter=filter,
search_params={"params": {"nprobe": 10}},
limit=10,
output_fields=["id", "text"]
)
filter = "TEXT_MATCH(text, 'keyword1') and TEXT_MATCH(text, 'keyword2')"
result = MilvusClient.query(
collection_name="YOUR_COLLECTION_NAME",
filter=filter,
output_fields=["id", "text"]
)
立即体验
我们诚邀您立即体验 阿里云向量检索服务Milvus 2.5版本 的强大功能!
产品新用户可免费试用入门版8 vCPU 32 GiB1个月,领取地址(https://x.sm.cn/4AqoOSM )
/ END /
更多推荐
↙ 点击 阅读原文 ,了解阿里云 Milvus 产品详情 !