面试题答案
一键面试1. 整体索引设计思路
对于电商商品信息索引,要考虑不同字段的查询特性,将经常用于过滤的字段设置为适合过滤的数据类型,对于文本字段要选择合适的分析器以优化搜索效果。
2. 字段类型设置
- 名称(name):
- 字段类型:可以设置为
text
类型用于全文搜索,同时设置一个keyword
子字段用于精确匹配,比如商品品牌名称等需要精确查询的场景。例如:
- 字段类型:可以设置为
{
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
}
- 描述(description):
- 字段类型:
text
类型,用于全文搜索商品详细描述。由于描述内容通常较长,更注重语义搜索,所以不设置keyword
子字段。分析器选择需要根据描述的语言特点,比如如果是中文,可选择ik_max_word
等适合中文分词的分析器;如果是英文,可选择english
分析器等。
- 字段类型:
- 价格(price):
- 字段类型:
float
或double
类型,如果价格精度要求较高可使用scaled_float
类型。例如,如果价格精度到分,可设置如下:
- 字段类型:
{
"properties": {
"price": {
"type": "scaled_float",
"scaling_factor": 100
}
}
}
- 分类(category):
- 字段类型:
keyword
类型,分类通常用于精确过滤和聚合操作,所以适合用keyword
类型。例如:
- 字段类型:
{
"properties": {
"category": {
"type": "keyword"
}
}
}
3. 分析器选择
- 中文文本字段:
- 对于商品名称和描述中的中文部分,推荐使用
ik_max_word
分析器,它会将文本尽可能细粒度地分词,适合电商商品搜索中对商品名称和描述的灵活查询。例如,对于 “苹果手机” 会分出 “苹果”“手机”“苹果手机” 等词,能满足不同搜索意图。
- 对于商品名称和描述中的中文部分,推荐使用
- 英文文本字段:
- 若商品名称或描述中有英文,
english
分析器是不错的选择。它会进行词干提取,比如将 “running” 提取为 “run”,能提高搜索召回率,同时会去除停用词(如 “the”“and” 等),减少噪音对搜索的影响。对于多语言文本,还可以考虑multilingual
分析器或结合自定义分析器来处理不同语言的分词需求。
- 若商品名称或描述中有英文,