面试题答案
一键面试查询语句调整
- 布尔查询调整:
- 原理:Elasticsearch 的布尔查询由 must、should、must_not 等子句组成。must 子句的文档必须匹配,should 子句增加文档相关性评分,must_not 子句排除匹配的文档。通过合理组合这些子句,可以精准筛选文档。例如,对于搜索“电子产品且价格低于5000且品牌为苹果或华为”,可使用布尔查询构建精准条件。
- 影响评估:正确使用布尔查询可快速缩小搜索范围,提高相关文档在结果集靠前位置的概率。可通过对比调整前后搜索结果的排序,计算平均倒数排名(MRR)等指标评估,若 MRR 提升,说明调整有效。
- 模糊查询调整:
- 原理:模糊查询允许在查询词拼写上有一定容错。它基于编辑距离(如 Levenshtein 距离)计算。例如,设置模糊度为2,对于查询词“apple”,像“appla”“aple”等相似词也可能匹配。
- 影响评估:适当增加模糊度可扩大搜索范围,找到更多潜在相关文档,但可能引入噪声。可通过统计召回率(recall)评估,召回率升高但准确率下降过多,则需调整模糊度。
评分算法修改
- TF - IDF 算法调整:
- 原理:词频 - 逆文档频率(TF - IDF)是 Elasticsearch 默认评分算法的基础部分。词频(TF)衡量一个词在文档中出现的频率,频率越高得分越高;逆文档频率(IDF)衡量一个词在整个索引中的稀有程度,稀有词 IDF 高。如“苹果”在一篇文档中多次出现且在整个索引中不常见,该文档关于“苹果”的评分就高。
- 影响评估:调整 TF - IDF 算法的权重因子,如加大 IDF 权重,可突出稀有词重要性。通过对比调整前后搜索结果相关性排序,观察用户对搜索结果的满意度反馈,若用户对结果中包含更多稀有词的文档更感兴趣,说明调整有效。
- 引入自定义评分函数:
- 原理:利用 Elasticsearch 的脚本功能,可编写自定义评分函数。如结合文档的创建时间、文档点赞数等额外信息进行评分。例如,创建时间越近、点赞数越多的文档评分越高。
- 影响评估:对比自定义评分前后搜索结果,可通过点击率(CTR)评估。若调整后搜索结果中高评分文档的点击率提升,说明自定义评分更符合用户需求。
索引结构优化
- 字段类型优化:
- 原理:选择合适的字段类型对搜索相关性影响重大。如对于文本字段,使用 text 类型可进行全文搜索并分析,keyword 类型用于精确匹配。对于数值字段,使用合适的数值类型(如 integer、long 等)可进行范围查询等。
- 影响评估:错误的字段类型可能导致搜索结果不准确。例如,将文本字段误设为 keyword 类型,会失去全文搜索能力。通过分析搜索结果的完整性和准确性评估,若调整字段类型后搜索结果能更全面且准确地包含相关信息,说明优化有效。
- 多字段索引:
- 原理:为一个字段创建多个索引,每个索引采用不同分析器或设置不同属性。如对于“description”字段,一个索引使用标准分析器用于全文搜索,另一个索引使用 keyword 分析器用于精确匹配。
- 影响评估:可提高不同搜索场景下的相关性。通过在不同搜索场景下对比调整前后搜索结果的相关性得分和排序,若不同搜索场景下的搜索结果都有明显改善,说明多字段索引优化有效。