课程进度 52% · 第4/6章第4/6章 · 标签 1/8
— 1 —
把用户问题拆成条件
用户想找“最近发布的 Java 事务课程”,其中“事务”是全文内容,“Java”是课程分类,“最近”是时间范围。先区分文本相关性和硬性资格,查询才容易解释。下面示例沿用上一章的映射,使用英文标题观察分词,不依赖额外中文分析插件。
课程难度、分类和时间最好作为明确筛选项呈现;自然语言猜出的条件应让用户看得懂并能取消。查询解释清晰,不仅利于排错,也能减少用户误以为“网站没有这门课程”的情况。
— 2 —
匹配、过滤和加分
match 会分析查询文本,适合标题正文;term 对照索引中的精确词项,适合 keyword 分类。bool 的 must 要求命中且参与评分,filter 限定资格但不贡献相关性分数,must_not 排除,should 可以提供加分或必选候选。必须明确 minimum_should_match 的语义。
例如只想优先显示标题命中的内容,可以把标题条件用作加分;若要求标题必须出现,就应成为必要条件。两种设计可能在样本第一页看起来相同,但一旦候选扩大,结果集合差异会暴露出来。
- 有 must 或 filter 时,should 默认可以一个都不满足。
- 若“至少匹配一个可选条件”是需求,显式设置 minimum_should_match 为 1。
- 不要对自然语言标题直接用 term 期待自动分词。