【发布时间】:2020-01-03 11:45:07
【问题描述】:
我正在使用基于 Edge NGram 标记器的自定义标记器,并且我希望能够搜索“sport+”之类的字符串,即我希望将特殊符号(例如 + 号)视为一部分令牌。
例如,我们有包含以下字段的文档:
"typeName": "LC 500h Sport+ CVT"
或者
"typeName": "LC 500h Sport CVT".
使用以下子句执行查询:
{
"match": {
"typeName": {
"query": "sport+ cvt",
"operator": "and"
}
}
}
获取两个文档。但是,在这种情况下,我们只希望返回带有 "typeName": "LC 500h Sport+ CVT" 的文档。
我们一直在分词器设置中使用以下 token_chars 类:digit、letter、punctuation。我认为将 symbol 添加为 token_chars 类并重新创建索引可以解决问题,但它没有帮助。
编辑: 这是 Nest 语法中的分析器定义:
Settings(s => s
.Analysis(_ =>
_.Analyzers(a => a
.Custom(
"vehicleanalyzer",
descriptor => descriptor
.Tokenizer(vehicleEdgeNgram)
.Filters("lowercase"))
.Standard("vehiclesearch",
descriptor => descriptor))
.Tokenizers(descriptor => descriptor
.EdgeNGram(
vehicleEdgeNgram,
tokenizerDescriptor =>
tokenizerDescriptor
.MinGram(1)
.MaxGram(10)
.TokenChars(
TokenChar.Digit,
TokenChar.Letter,
TokenChar.Punctuation,
TokenChar.Symbol)))))
【问题讨论】:
-
能否分享您的分析仪定义?
-
@Lupanoide 我在 Nest 语法中添加了分析器定义,因为这是我们实际创建它的方式。谢谢!
标签: elasticsearch nest