面试题答案
一键面试查询语句构建
在ElasticSearch中,可以使用multi_match
查询来在多个字段中同时搜索某个关键词。示例如下:
{
"query": {
"multi_match" : {
"query": "要搜索的关键词",
"fields": ["name", "description"]
}
}
}
底层原理
- 分析阶段:ElasticSearch首先会对输入的查询关键词进行分析,根据配置的分析器将其拆分成一个个的词项(tokens)。比如,对于英文文本,可能会按空格、标点等进行分词,同时还可能进行词干提取、大小写转换等操作。
- 倒排索引查找:ElasticSearch使用倒排索引来存储数据。倒排索引是一种从词项到文档的映射结构。在分析出词项后,ElasticSearch会在
name
和description
字段对应的倒排索引中查找这些词项。每个词项在倒排索引中都关联着包含该词项的文档列表,以及词项在文档中的位置等信息。 - 评分与排序:根据找到的文档与查询词项的匹配情况,ElasticSearch会为每个文档计算一个相关性得分。得分的计算基于多种因素,例如词项在文档中出现的频率、字段的权重(如果设置了)、文档的长度等。最后,ElasticSearch会根据这个得分对搜索结果进行排序,将相关性高的文档排在前面返回给用户。