面试题答案
一键面试请求编写
假设使用Elasticsearch,请求可以这样写(以JSON格式表示):
{
"fields": [
"user.name",
"posts.title"
],
"query": {
"match_all": {}
}
}
这里假设文档已经存储在Elasticsearch中,通过fields
指定要获取的特定字段,query
部分使用match_all
查询是为了匹配所有文档。如果有特定的过滤条件,可以修改query
部分。
ElasticSearch底层实现解释
- 字段映射:Elasticsearch在索引文档时,会根据文档结构建立字段映射(Field Mapping)。对于
user.name
和posts.title
这样的嵌套字段,它会记录其在文档中的路径和数据类型等信息。在检索时,通过这些映射信息快速定位到相应的字段数据。 - 倒排索引:Elasticsearch使用倒排索引来加速检索。当执行上述请求时,它会根据
fields
中的字段名在倒排索引中查找对应的文档列表。对于嵌套字段,它会按照映射规则解析嵌套结构找到目标数据。例如,对于user.name
,它会沿着user
对象找到name
字段的值;对于posts.title
,会在posts
数组中的每个对象里找到title
字段。然后从存储的文档数据中提取出这些字段的值返回给客户端。