同义词
synonym 过滤器根据同义词词典重写词块,以便在搜索时匹配相关术语。它支持两种操作符和两种提供词典的方式:
操作模式-
expand模式保留原始标记,并在旁边发出附加同义词;规范化模式 (expand: false) 将标记改写为规范形式。字典来源--小型字典可通过
synonyms数组内联到过滤器配置中;大型字典应存储为文件资源,并通过synonyms_file引用。
词典格式
同义词词典是纯文本文档(或内联数组),其中每行定义一条规则。支持两种规则形式。
映射规则
fast, quick => speedy
左边的标记 (fast,quick) 重写为右边的标记 (speedy)。允许多个目标:
small, little => tiny, compact
使用expand: true 时,原始标记与目标标记一起保留:
输入
fast,expand: true→fast、speedy输入
fast,expand: false→ 。speedy
等价组
happy, joyful, cheerful
所有列出的标记都被认为是等价的:
有了
expand: true,该组中任何标记的任何出现都会发射该组中的每个标记。输入happy→happy,joyful,cheerful。使用
expand: false时,每个出现的标记都会被改写为组中的第一个标记。输入joyful→happy;输入happy已是第一个标记,保持不变。
配置
synonym 过滤器是一个自定义过滤器。指定"type": "synonym" 以及synonyms (内联)或synonyms_file (外部)中的至少一个,再加上expand 标志。
analyzer_params = {
"tokenizer": "standard",
"filter": [
{
"type": "synonym",
"synonyms": [ # inline rules (optional)
"fast, quick => speedy",
"happy, joyful, cheerful",
],
"synonyms_file": { # external rules (optional)
"type": "remote",
"resource_name": "en_synonyms",
"file_name": "synonyms.txt",
},
"expand": True,
}
],
}
synonym 过滤器接受以下参数。
参数 |
说明 |
默认值 |
|---|---|---|
|
规则字符串的内联数组。每个字符串都使用上述字典格式。适用于小型字典(最多几十条规则)。 |
- |
|
- |
|
|
true:保留原始标记并在其旁边发出同义词;false:将标记改写为其规范形式(映射的右侧或等价组的第一个标记)。 |
假 |
您可以指定synonyms 、synonyms_file 或两者。当两者都出现时,过滤器会合并两个来源。该过滤器对标记符生成器产生的标记进行操作;因此必须与标准标记符等标记符生成器结合使用。
外部字典文件
对于生产规模的字典,将文件注册为远程文件资源,并从synonyms_file 引用。
from pymilvus import MilvusClient
client = MilvusClient(uri="http://localhost:19530")
# Register the file once, then reference it from any analyzer that needs it.
client.add_file_resource(
name="en_synonyms",
path="file/synonyms.txt", # full S3 object key, including rootPath
)
analyzer_params = {
"tokenizer": "standard",
"filter": [{
"type": "synonym",
"synonyms_file": {
"type": "remote",
"resource_name": "en_synonyms",
"file_name": "synonyms.txt",
},
"expand": True,
}],
}
有关完整的工作流程(上传、注册、列表、删除)和其他"type": "local" 表格,请参阅管理文件资源。
示例
在将分析器应用于 Collections Schema 之前,请使用run_analyzer 验证其行为。为简洁起见,以下示例使用内联synonyms 数组;如果字典较大,请用synonyms_file 代替。
expand: true - 保留原文,添加同义词
from pymilvus import MilvusClient
client = MilvusClient(uri="http://localhost:19530")
analyzer_params = {
"tokenizer": "standard",
"filter": [{
"type": "synonym",
"synonyms": [
"fast, quick => speedy",
"happy, joyful, cheerful",
],
"expand": True,
}],
}
print(client.run_analyzer(["a fast car"], analyzer_params))
# → [['a', 'fast', 'speedy', 'car']]
print(client.run_analyzer(["i am happy today"], analyzer_params))
# → [['i', 'am', 'happy', 'joyful', 'cheerful', 'today']]
fast 和happy 都将保留;它们的同义词也将同时发布。
expand: false - 重写为规范格式
analyzer_params_norm = {
"tokenizer": "standard",
"filter": [{
"type": "synonym",
"synonyms": [
"fast, quick => speedy",
"happy, joyful, cheerful",
],
"expand": False,
}],
}
print(client.run_analyzer(["a fast car"], analyzer_params_norm))
# → [['a', 'speedy', 'car']]
print(client.run_analyzer(["i am happy today"], analyzer_params_norm))
# → [['i', 'am', 'happy', 'today']]
映射规则将fast 改写为speedy 。等价组将happy 保留不变,因为它是该组的第一个标记;包含joyful 或cheerful 的输入将被改写为happy 。