在笔记本电脑上通常有一个“类型名称”,例如。 联想T430 联想T430P 联想T430S
阿苏
用户希望在搜索T430时找到T430的所有变体
但是,弹性搜索中的标准分析器会对空间/非风险数据进行标记。
因此搜索T430只会返回T430变体,而不会返回其他变体。
解决此问题的最佳方法是什么?我考虑过这些解决方案
检测用户是否搜索产品类型并将搜索转换为通配符搜索,例如。 T430 * - 这很难扩展
使分析仪了解不同类型的产品类型,并可以从T430S构建T430令牌
答案 0 :(得分:1)
elasticsearch将分析default.So,你应该设置你的elasticsearch的映射如下, " field":{ "索引":" not_analyzed", "输入":" string" }, 或者您可以在创建新索引之前设置模板。 我希望它会对你有所帮助。
答案 1 :(得分:0)
您可以使用性能优于通配符查询的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
值。并在您的领域中使用
"type_name": {"type": "string", "analyzer": "my_analyzer"}
现在,您可以在字段type_name