为自动映射的附件字段指定分析器
Specifying the Analyzer for an auto mapped attachment field
使用 Nest,我有一个功能可以设置所有 Elasticsearch 文档字段和 analyzers/SearchAnalyzers。
其中一个字段是 Nest Attachment 对象。这用于附加 PDF,以便 PDF 的内容可以被 Elasticsearch 索引。
运行 附件字段上的“分析”Elasticsearch 请求显示它正在使用 'default' 分析器。
我想知道的是如何为此附件字段(自动映射)指定自定义分析器。
我想将 Attachment.Content 字段映射到名为“literalNameSynonymsAnalyzer”的分析器,因为该字段在解析并转换为纯英文文本后保存 PDF 的内容。
protected override TypeMappingDescriptor<HondaData> ConfigureDocumentMapping(TypeMappingDescriptor<HondaData> mapping)
{
return mapping
.AutoMap()
.Properties(prop => prop
.Text(text => text
.Name(name => name.Id)
.Analyzer("keyword"))
.Text(text => text
.Name(name => name.VehicleIds)
.Analyzer("keyword"))
.Text(text => text
.Name(name => name.Titles)
.Analyzer("english")
.SearchAnalyzer("literalNameSynonymsAnalyzer"))
.Text(text => text
.Name(name => name.FileContent)
.Analyzer("english")
.SearchAnalyzer("literalNameSynonymsAnalyzer"))
.Object<Attachment>(a => a
.Name(n => n.Attachment)
.AutoMap()));
}
这是管道函数
protected Task CreateAttachmentPipeline()
{
return Client.PutPipelineAsync(
"HondaPdfPipeline",
p => p
.Processors(pr => pr
.Attachment<HondaData>(a => a
.Field(f => f.Base64FileContent)
.TargetField(f => f.Attachment))
.Remove<HondaData>(r => r
.Field(f => f.Base64FileContent))));
}
Attachment
映射的Content
属性可以指定使用自定义分析器
protected override TypeMappingDescriptor<HondaData> ConfigureDocumentMapping(TypeMappingDescriptor<HondaData> mapping)
{
return mapping
.AutoMap()
.Properties(prop => prop
.Text(text => text
.Name(name => name.Id)
.Analyzer("keyword"))
.Text(text => text
.Name(name => name.VehicleIds)
.Analyzer("keyword"))
.Text(text => text
.Name(name => name.Titles)
.Analyzer("english")
.SearchAnalyzer("literalNameSynonymsAnalyzer"))
.Text(text => text
.Name(name => name.FileContent)
.Analyzer("english")
.SearchAnalyzer("literalNameSynonymsAnalyzer"))
.Object<Attachment>(a => a
.Name(n => n.Attachment)
.AutoMap()
.Properties(pp => pp
.Text(t => t
.Name(n => n.Content)
.Analyzer("literalNameSynonymsAnalyzer")
)
)
)
);
}
使用 Nest,我有一个功能可以设置所有 Elasticsearch 文档字段和 analyzers/SearchAnalyzers。
其中一个字段是 Nest Attachment 对象。这用于附加 PDF,以便 PDF 的内容可以被 Elasticsearch 索引。
运行 附件字段上的“分析”Elasticsearch 请求显示它正在使用 'default' 分析器。
我想知道的是如何为此附件字段(自动映射)指定自定义分析器。
我想将 Attachment.Content 字段映射到名为“literalNameSynonymsAnalyzer”的分析器,因为该字段在解析并转换为纯英文文本后保存 PDF 的内容。
protected override TypeMappingDescriptor<HondaData> ConfigureDocumentMapping(TypeMappingDescriptor<HondaData> mapping)
{
return mapping
.AutoMap()
.Properties(prop => prop
.Text(text => text
.Name(name => name.Id)
.Analyzer("keyword"))
.Text(text => text
.Name(name => name.VehicleIds)
.Analyzer("keyword"))
.Text(text => text
.Name(name => name.Titles)
.Analyzer("english")
.SearchAnalyzer("literalNameSynonymsAnalyzer"))
.Text(text => text
.Name(name => name.FileContent)
.Analyzer("english")
.SearchAnalyzer("literalNameSynonymsAnalyzer"))
.Object<Attachment>(a => a
.Name(n => n.Attachment)
.AutoMap()));
}
这是管道函数
protected Task CreateAttachmentPipeline()
{
return Client.PutPipelineAsync(
"HondaPdfPipeline",
p => p
.Processors(pr => pr
.Attachment<HondaData>(a => a
.Field(f => f.Base64FileContent)
.TargetField(f => f.Attachment))
.Remove<HondaData>(r => r
.Field(f => f.Base64FileContent))));
}
Attachment
映射的Content
属性可以指定使用自定义分析器
protected override TypeMappingDescriptor<HondaData> ConfigureDocumentMapping(TypeMappingDescriptor<HondaData> mapping)
{
return mapping
.AutoMap()
.Properties(prop => prop
.Text(text => text
.Name(name => name.Id)
.Analyzer("keyword"))
.Text(text => text
.Name(name => name.VehicleIds)
.Analyzer("keyword"))
.Text(text => text
.Name(name => name.Titles)
.Analyzer("english")
.SearchAnalyzer("literalNameSynonymsAnalyzer"))
.Text(text => text
.Name(name => name.FileContent)
.Analyzer("english")
.SearchAnalyzer("literalNameSynonymsAnalyzer"))
.Object<Attachment>(a => a
.Name(n => n.Attachment)
.AutoMap()
.Properties(pp => pp
.Text(t => t
.Name(n => n.Content)
.Analyzer("literalNameSynonymsAnalyzer")
)
)
)
);
}