Milvus(13):自定义分析器、过滤器

1 自定义分析器

1.1 标准标记符

Milvus 中的standard 令牌分割器根据空格和标点符号分割文本,适用于大多数语言。要配置使用standard 令牌转换器的分析器,请在analyzer_params 中将tokenizer 设置为standard

python 复制代码
analyzer_params = {
    "tokenizer": "standard",
}

standard 标记符号分析器可与一个或多个过滤器结合使用。例如,以下代码定义了一个使用standard 标记器和lowercase 过滤器的分析器:

python 复制代码
analyzer_params = {
    "tokenizer": "standard",
    "filter": ["lowercase"]
}

定义analyzer_params 后,可以在定义 Collections Schema 时将它们应用到VARCHAR 字段。这样,Milvus 就能使用指定的分析器对该字段中的文本进行处理,从而实现高效的标记化和过滤。

1.2 空格

只要单词之间有空格,whitespace 标记符号器就会将文本划分为术语。要配置使用whitespace 标记符号生成器的分析器,请在analyzer_params 中将tokenizer 设置为whitespace

python 复制代码
analyzer_params = {
    "tokenizer": "whitespace",
}

空白标记符可以与一个或多个过滤器结合使用。例如,下面的代码定义了一个使用whitespace 标记符和lowercase过滤器的分析器:

python 复制代码
analyzer_params = {
    "tokenizer": "whitespace",
    "filter": ["lowercase"]
}

定义analyzer_params 后,可以在定义 Collections Schema 时将它们应用到VARCHAR 字段。这样,Milvus 就能使用指定的分析器对该字段中的文本进行处理,从而实现高效的标记化和过滤。

1.3 词霸

jieba 标记符号转换器可将中文文本分解为单词。

python 复制代码
# 简单配置:仅指定标记器名称
analyzer_params = {
    "tokenizer": "jieba",  # 使用默认设置:dict=["_default_"], mode="search", hmm=true
}

分析器配置示例:

python 复制代码
analyzer_params = {
    "tokenizer": {
        "type": "jieba",
        "dict": ["结巴分词器"],
        "mode": "exact",
        "hmm": False
    }
}

预期输出:

python 复制代码
['milvus', '结巴分词器', '中', '文', '测', '试']

2 过滤器

2.1 小写

lowercase 过滤器将标记符号生成器生成的术语转换为小写,使搜索不区分大小写。例如,它可以将["High", "Performance", "Vector", "Database"] 转换为["high", "performance", "vector", "database"]

lowercase 过滤器内置于 Milvus。要使用它,只需在analyzer_params 中的filter 部分指定其名称即可。

python 复制代码
analyzer_params = {
    "tokenizer": "standard",
    "filter": ["lowercase"],
}

lowercase 过滤器对标记符生成的术语进行操作,因此必须与标记符结合使用。定义analyzer_params 后,可以在定义 Collections Schema 时将其应用到VARCHAR 字段。这样,Milvus 就可以使用指定的分析器对该字段中的文本进行处理,从而实现高效的标记化和过滤。

2.2 ASCII 折叠

asciifolding 过滤器可将基本拉丁统一码块(前 127 个 ASCII 字符)以外的字符转换为其 ASCII 对应字符。asciifolding 过滤器内置在 Milvus 中。要使用它,只需在analyzer_params 中的filter 部分指定其名称即可。

python 复制代码
analyzer_params = {
    "tokenizer": "standard",
    "filter": ["asciifolding"],
}

asciifolding 过滤器对标记符生成的术语进行操作,因此必须与标记符结合使用。定义analyzer_params 后,可以在定义 Collections Schema 时将其应用到VARCHAR 字段。这样,Milvus 就可以使用指定的分析器对该字段中的文本进行处理,从而实现高效的标记化和过滤。

2.3 仅字母

alphanumonly 过滤器删除包含非 ASCII 字符的标记,只保留字母数字术语。该过滤器适用于处理只有基本字母和数字的文本,不包括任何特殊字符或符号。alphanumonly 过滤器内置在 Milvus 中。要使用它,只需在analyzer_params 中的filter 部分指定其名称即可。

python 复制代码
analyzer_params = {
    "tokenizer": "standard",
    "filter": ["alphanumonly"],
}

alphanumonly 过滤器对标记符生成的术语进行操作,因此必须与标记符结合使用。定义analyzer_params 后,可以在定义 Collections Schema 时将其应用到VARCHAR 字段。这样,Milvus 就可以使用指定的分析器对该字段中的文本进行处理,从而实现高效的标记化和过滤。

预期输出

复制代码
['Milvus', '2', '0', 'Scale', 'AI', 'Vector']

2.4 Cnalphanumonly

cnalphanumonly 过滤器会删除包含除汉字、英文字母或数字以外的任何字符的标记。cnalphanumonly 过滤器内置于 Milvus 中。要使用它,只需在analyzer_params 中的filter 部分指定其名称即可。

python 复制代码
analyzer_params = {
    "tokenizer": "standard",
    "filter": ["cnalphanumonly"],
}

cnalphanumonly 过滤器对标记符生成的术语进行操作,因此必须与标记符结合使用。定义analyzer_params 后,可以在定义 Collections Schema 时将其应用到VARCHAR 字段。这样,Milvus 就可以使用指定的分析器对该字段中的文本进行处理,从而实现高效的标记化和过滤。

预期输出

复制代码
['Milvus', '是', 'LF', 'AI', 'Data', 'Foundation', '下的一个开源项目', '以', 'Apache', '2', '0', '许可发布']

2.5 Cncharonly

cncharonly 过滤器会删除包含任何非中文字符的标记。当您只想关注中文文本,过滤掉任何包含其他脚本、数字或符号的标记时,该过滤器非常有用。cncharonly 过滤器内置在 Milvus 中。要使用它,只需在analyzer_params 中的filter 部分指定其名称即可。

复制代码
analyzer_params = {
    "tokenizer": "standard",
    "filter": ["cncharonly"],
}

cncharonly 过滤器对标记符生成的术语进行操作,因此必须与标记符结合使用。定义analyzer_params 后,可以在定义 Collections Schema 时将其应用到VARCHAR 字段。这样,Milvus 就可以使用指定的分析器对该字段中的文本进行处理,从而实现高效的标记化和过滤。

预期输出

复制代码
['是', '下的一个开源项目', '以', '许可发布']

2.6 长度

length 过滤器可移除不符合指定长度要求的标记,让您可以控制文本处理过程中保留的标记长度。length 过滤器是 Milvus 中的自定义过滤器,通过在过滤器配置中设置"type": "length" 来指定。您可以在analyzer_params 中将其配置为字典,以定义长度限制。

python 复制代码
analyzer_params = {
    "tokenizer": "standard",
    "filter":[{
        "type": "length", # 指定过滤器类型为length
        "max": 10, # 将最大令牌长度设置为10个字符
    }],
}

length 过滤器接受以下可配置参数。

参数 说明
max 设置最大标记长度。超过此长度的标记将被删除。

length 过滤器对标记符生成器生成的术语进行操作,因此必须与标记符生成器结合使用。定义analyzer_params 后,可以在定义 Collections Schema 时将其应用到VARCHAR 字段。这样,Milvus 就可以使用指定的分析器对该字段中的文本进行处理,从而实现高效的标记化和过滤。

2.7 停止词

stop 过滤器会从标记化文本中移除指定的停止词,帮助剔除常见的、意义不大的词。您可以使用stop_words 参数配置停用词列表。stop 过滤器是 Milvus 的自定义过滤器。要使用它,请在过滤器配置中指定"type": "stop" 以及提供停用词列表的stop_words 参数。

python 复制代码
analyzer_params = {
    "tokenizer": "standard",
    "filter":[{
        "type": "stop", # S指定过滤器类型为stop
        "stop_words": ["of", "to", "_english_"], # 定义自定义停止词并包括英语停止词列表
    }],
}

stop 过滤器接受以下可配置参数。

参数 说明
stop_words 要从标记化中删除的单词列表。默认情况下,使用预定义的_english_ 列表,其中包含常见的英文停止词。

stop 过滤器对标记化器生成的词语进行操作,因此必须与标记化器结合使用。定义analyzer_params 后,可以在定义 Collections Schema 时将其应用到VARCHAR 字段。这样,Milvus 就可以使用指定的分析器对该字段中的文本进行处理,从而实现高效的标记化和过滤。

2.8 分词器

decompounder 过滤器可根据指定词典将复合词拆分成单个成分,从而更方便地搜索复合词的各个部分。该过滤器对德语等经常使用复合词的语言尤其有用。decompounder 过滤器是 Milvus 的自定义过滤器。要使用它,请在过滤器配置中指定"type": "decompounder" ,同时指定word_list 参数,该参数提供了要识别的单词成分字典。

python 复制代码
analyzer_params = {
    "tokenizer": "standard",
    "filter":[{
        "type": "decompounder", # 指定过滤器类型为分解器
        "word_list": ["dampf", "schiff", "fahrt", "brot", "backen", "automat"],
    }],
}

decompounder 过滤器接受以下可配置参数。

参数 说明
word_list 用于拆分复合词的单词成分列表。该字典决定了如何将复合词分解为单个术语。

decompounder 过滤器对标记化器生成的术语进行操作,因此必须与标记化器结合使用。定义analyzer_params 后,可以在定义 Collections Schema 时将其应用到VARCHAR 字段。这样,Milvus 就可以使用指定的分析器对该字段中的文本进行处理,从而实现高效的标记化和过滤。

预期输出

python 复制代码
['dampf', 'schiff', 'fahrt', 'brotbackautomat']

2.9 词干

stemmer 过滤器可将单词还原为其基本形式或词根形式(称为词干化),从而更容易匹配不同词性中含义相似的单词。stemmer 过滤器支持多种语言,可在各种语言环境中进行有效搜索和索引。stemmer 过滤器是 Milvus 的自定义过滤器。要使用它,请在过滤器配置中指定"type": "stemmer" ,并使用language 参数选择所需的语言进行词干处理。

python 复制代码
analyzer_params = {
    "tokenizer": "standard",
    "filter":[{
        "type": "stemmer", # 将筛选器类型指定为stemmer
        "language": "english", # 将词干提取的语言设置为英语
    }],
}

stemmer 过滤器接受以下可配置参数。

参数 参数
language 指定词干处理的语言。支持的语言包括"arabic","danish","dutch","english","finnish","french","german","greek","hungarian","italian","norwegian","portuguese","romanian","russian","spanish","swedish","tamil""turkish"

stemmer 过滤器对标记化器生成的术语进行操作,因此必须与标记化器结合使用。定义analyzer_params 后,可以在定义 Collections Schema 时将其应用到VARCHAR 字段。这样,Milvus 就可以使用指定的分析器对该字段中的文本进行处理,从而实现高效的标记化和过滤。

相关推荐
游王子5 小时前
Milvus(10):JSON 字段、数组字段
json·milvus
游王子8 小时前
Milvus(12):分析器
milvus
今晚去打老虎17 小时前
快速掌握大语言模型+向量数据库_RAG实现
人工智能·python·语言模型·milvus
damonzheng464 天前
milvus编译与使用
milvus
游王子7 天前
Milvus(8):密集向量、二进制向量、稀疏向量
milvus
游王子7 天前
Milvus(9):字符串字段、数字字段
数据库·milvus
卓越进步8 天前
【深度好文】4、Milvus 存储设计深度解析
milvus·架构原理·向量数据量
啦哈哈啦8 天前
springboot + langchain4j + xinference + milvus
java·spring boot·语言模型·milvus
码观天工8 天前
.NET 原生驾驭 AI 新基建实战系列(五):Milvus ── 大规模 AI 应用的向量数据库首选
c#·.net·milvus·向量数据库·高性能