Elasticsearch 部分产品类型名称
Elasticsearch partial producttype names
在笔记本电脑上通常有 "type name" 例如。
联想T430
联想T430P
联想 T430S
阿苏
用户希望在搜索 T430 时找到 T430 的所有变体
但是 elasticsearch 中的标准分析器在 space/non-alfanumeric 上标记化。
因此搜索 T430 只会 return T430 变体而不是其他变体。
解决这个问题的最佳方法是什么?我想过这些解决方案
检测到用户搜索产品类型并将搜索转换为通配符搜索,例如。 T430* - 这很难扩展
制作一个分析器,了解不同类型的产品类型,并可以从 T430S 构建 T430 令牌
elasticsearch 会分析default.So,你应该如下设置elasticsearch 的映射,
"field":{
"index": "not_analyzed",
"type": "string"
},
或者您可以在创建新索引之前设置模板。
希望对您有所帮助。
您可以使用 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
在笔记本电脑上通常有 "type name" 例如。 联想T430 联想T430P 联想 T430S
阿苏
用户希望在搜索 T430 时找到 T430 的所有变体
但是 elasticsearch 中的标准分析器在 space/non-alfanumeric 上标记化。
因此搜索 T430 只会 return T430 变体而不是其他变体。
解决这个问题的最佳方法是什么?我想过这些解决方案
检测到用户搜索产品类型并将搜索转换为通配符搜索,例如。 T430* - 这很难扩展
制作一个分析器,了解不同类型的产品类型,并可以从 T430S 构建 T430 令牌
elasticsearch 会分析default.So,你应该如下设置elasticsearch 的映射, "field":{ "index": "not_analyzed", "type": "string" }, 或者您可以在创建新索引之前设置模板。 希望对您有所帮助。
您可以使用 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