match_phrase 短语匹配
本章定位:match 查询只看"有没有这些词",match_phrase 要求"这些词按顺序出现"。slop 参数允许词之间间隔一定数量。
定义与作用
match_phrase 查询首先将查询文本分词,然后要求所有词项按顺序出现在文档中(位置连续)。slop(短语间隔)参数允许词项之间有一定间隔。
解决的痛点:match 查"机器学习"会匹配到"学机器习"这样的文档(词项存在但顺序乱)。match_phrase 确保词项顺序一致。
完整示例:小崔的精确短语搜索
# 基础 match_phrase
POST /courses/_search
{
"query": {
"match_phrase": {
"title": {
"query": "Python 数据分析",
"slop": 1
}
}
}
}
# → "Python 数据科学分析" (slop=1 允许间隔 1 个词)
# → "Python 数据分析实战" (slop=0 精确匹配)
小结
match_phrase 通过词项位置信息实现短语匹配。slop 越大召回越高但性能越低。索引时需设置 index_options: positions 保留位置信息。