面试题答案
一键面试文本类型字段
- text类型:
- 适用场景:对于需要进行全文搜索的长文本字段,如文章内容、产品描述等,应设置为
text
类型。例如,一篇博客文章的正文部分,用户可能会搜索其中的某些关键词,text
类型会对文本进行分词处理,建立倒排索引,从而实现高效的全文检索。 - 示例:
- 适用场景:对于需要进行全文搜索的长文本字段,如文章内容、产品描述等,应设置为
{
"mappings": {
"properties": {
"article_content": {
"type": "text"
}
}
}
}
- keyword类型:
- 适用场景:当字段用于精确匹配、排序、聚合等操作时,设置为
keyword
类型。比如产品的SKU(库存保有单位)、用户的ID、文章的分类标签(如果分类标签数量有限且固定)等。这些字段不需要分词,直接以完整的字符串形式进行存储和检索。 - 示例:
- 适用场景:当字段用于精确匹配、排序、聚合等操作时,设置为
{
"mappings": {
"properties": {
"product_sku": {
"type": "keyword"
},
"user_id": {
"type": "keyword"
},
"article_category": {
"type": "keyword"
}
}
}
}
数字类型字段
对于数字类型字段,如产品价格、用户年龄等,应设置为合适的数字类型,如long
(长整型,适用于较大整数)、integer
(整型)、float
(单精度浮点数)、double
(双精度浮点数)等。这不仅可以准确存储数据,还能在进行数值范围查询、聚合计算(如求平均值、总和等)时提供高效支持。
- 示例:
{
"mappings": {
"properties": {
"product_price": {
"type": "float"
},
"user_age": {
"type": "integer"
}
}
}
}
日期类型字段
日期类型字段,如文章发布时间、订单创建时间等,应设置为date
类型。可以通过format
参数指定日期格式,以确保日期数据的正确存储和检索。常见的日期格式有yyyy - MM - dd
、yyyy - MM - dd HH:mm:ss
等。
- 示例:
{
"mappings": {
"properties": {
"article_publish_date": {
"type": "date",
"format": "yyyy - MM - dd"
},
"order_create_date": {
"type": "date",
"format": "yyyy - MM - dd HH:mm:ss"
}
}
}
}
优化搜索性能
- 减少不必要的分词:对于不需要全文搜索的字段设置为
keyword
类型,避免分词带来的性能开销,同时能加快精确匹配的速度。 - 合理使用字段数据类型:正确选择数字和日期类型,可提高数值和日期相关操作的效率。例如,使用整数类型存储年龄比使用字符串类型在查询和聚合时更高效。
- 多字段设置:有时候可以对一个字段同时设置
text
和keyword
类型,以满足全文搜索和精确匹配等多种需求。例如:
{
"mappings": {
"properties": {
"article_title": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
}
}
这样article_title
字段既可以用于全文搜索,其keyword
子字段又可用于精确匹配和排序等操作。