在笔记本电脑上通常有一个"typename",例如。
联想T430
联想T430P
联想T430S
麻生
用户希望在搜索T430时找到T430的所有变体
但是Elasticsearch中的标准分析器基于空间/非字母数字的aso进行标记。
因此,搜索T430将仅返回T430变体,而不会返回其他变体。
解决此问题的最佳方法是什么?我已经考虑过这些解决方案
最佳答案
您可以使用prefix query比通配符查询执行得更好。
为此,您需要不对字段进行如下分析
"type_name": {"type": "string", "index": "not_analyzed"}
另一种方法是使用edge ngram tokenizer,这可能会增加索引大小,但会提供更好的性能。
您可以如下定义自定义分析器
{
"settings" : {
"analysis" : {
"analyzer" : {
"my_analyzer" : {
"tokenizer" : "customedgeNgram"
}
},
"tokenizer" : {
"customedgeNgram" : {
"type" : "edgeNGram",
"min_gram" : "3",
"max_gram" : "10"
}
}
}
}
}
您需要根据需要更改
min_gram
和max_gram
值。并在您的 Realm 中用作"type_name": {"type": "string", "analyzer": "my_analyzer"}
现在,您可以在字段
type_name
上使用简单术语查询