拼音Compatible with Milvus 3.0.x
中文文本搜索通常要求用户输入的汉字与索引文本中的汉字完全一致。在名称查询、自动完成和边输入边搜索等操作流程中,用户通常会输入拼音而非汉字。 例如,用户可能输入“zuqiu ”来搜索“足球 ”。pinyin 过滤器会在分析器输出中添加拼音分词,从而使中文文本能够与拼音输入进行匹配,而无需维护单独的拼音字段。
pinyin 过滤器通常与Jieba分词器配合使用,处理中文文本。它可在自定义分析器过滤器管道中运行,并能针对同一中文词元输出多种拼音词元形式。
配置
要使用默认选项,请在analyzer_params 文件的filter 部分中指定"pinyin" 。
analyzer_params = {
"tokenizer": "jieba",
"filter": ["pinyin"],
}
此简写形式会保留原始的中文分词结果,并输出字符级拼音分词。除非您显式启用相关选项,否则它不会输出连写拼音或拼音首字母。
若需完全控制,请将过滤器指定为对象,并配置 Milvus 输出的拼音令牌形式。
analyzer_params = {
"tokenizer": "jieba",
"filter": [
{
"type": "pinyin",
"keep_original": True,
"keep_full_pinyin": True,
"keep_joined_full_pinyin": False,
"keep_separate_first_letter": False,
}
],
}
该过滤器接受以下参数。
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
keep_original | 布尔值 | true | 在分析器的输出中保留原始的中文分词结果。 |
keep_full_pinyin | 布尔值 | true | 输出字符级拼音分词。例如,中文 将生成zhong 和wen 。 |
keep_joined_full_pinyin | 布尔值 | false | 针对每个源词元,输出一个拼合的拼音词元。例如,中文 将生成zhongwen 。 |
keep_separate_first_letter | 布尔值 | false | 针对每个源词元,输出一个拼音首字母词元。例如,中文 会生成zw 。 |
该过滤器对分词器生成的词元进行处理。对于中文文本,请将其与jieba 等分词器配合使用。
示例
在将分析器配置应用到 Collection Schema 之前,请使用run_analyzer 验证其行为。
from pymilvus import MilvusClient
client = MilvusClient(uri="http://localhost:19530")
sample_text = "中文测试"
将中文文本与字符级拼音进行匹配
默认的pinyin 过滤器会保留原始的中文分词结果,并输出字符级拼音分词结果。
analyzer_params = {
"tokenizer": "jieba",
"filter": ["pinyin"],
}
result = client.run_analyzer(sample_text, analyzer_params)
print(result)
预期输出:
['中文', 'zhong', 'wen', '测试', 'ce', 'shi']
将中文词与拼写连读形式进行匹配
当需要让中文词与完整的拼写形式进行匹配时,请启用keep_joined_full_pinyin 。
analyzer_params = {
"tokenizer": "jieba",
"filter": [
{
"type": "pinyin",
"keep_original": True,
"keep_full_pinyin": False,
"keep_joined_full_pinyin": True,
"keep_separate_first_letter": False,
}
],
}
result = client.run_analyzer(sample_text, analyzer_params)
print(result)
预期输出:
['中文', 'zhongwen', '测试', 'ceshi']
将中文词与拼音首字母进行匹配
当需要将中文词汇与该词的拼音首字母进行匹配时,请启用keep_separate_first_letter 。
analyzer_params = {
"tokenizer": "jieba",
"filter": [
{
"type": "pinyin",
"keep_original": True,
"keep_full_pinyin": False,
"keep_joined_full_pinyin": False,
"keep_separate_first_letter": True,
}
],
}
result = client.run_analyzer(sample_text, analyzer_params)
print(result)
预期输出:
['中文', 'zw', '测试', 'cs']