如何在Azure Cognitive Search中实现非关键词匹配的关联内容推荐?
实现思路
以下是几种可行的方案,可根据业务场景选择:
1. 自定义同义词映射
利用Azure Cognitive Search的同义词功能,将用户搜索词与目标文章标题建立语义关联,突破单纯的关键词匹配限制:
- 在Azure Cognitive Search中创建同义词集,添加映射规则:
always feeling tired, feeling tired, tired => tiredness - 编辑现有索引,将文章标题字段和搜索内容字段配置为使用该同义词集
- 搜索时系统会自动将用户查询词映射为
tiredness,从而匹配到标题为"Tiredness"的文章 - 额外设置:给标题字段配置更高的搜索权重(在索引字段的
searchable属性中调整weight参数),确保该文章在结果中排名靠前
2. 自定义查询提升规则
维护一个搜索意图-目标文章的映射表(可存储在Azure Table Storage或SQL数据库中),提前定义类似"always feeling tired"这类查询对应的目标文章ID:
- 用户发起搜索时,先检查映射表是否匹配当前查询
- 若命中,构造包含目标文章ID的过滤查询,并通过
search.scoreboost参数给该文章设置极高权重(例如search.scoreboost=10) - 将提升后的查询结果与普通搜索结果合并,把目标文章放在返回结果的首位
- 若未命中映射表,直接返回普通搜索结果即可
3. 结合大模型做意图识别
利用Azure OpenAI的大模型(如GPT-3.5/4)解析用户的自然语言查询,识别核心主题:
- 将用户查询文本传入大模型,prompt设置为"分析以下用户搜索内容,输出对应的核心主题关键词:{query}",例如输入"always feeling tired"会返回"Tiredness"
- 用识别出的主题关键词搜索索引,找到对应的文章
- 将该文章插入到普通搜索结果的第一位返回
- 优势:能处理更复杂、多样化的自然语言查询,无需手动维护映射规则
额外优化点
- 无论采用哪种方案,都可以在搜索结果返回后,通过代码逻辑手动调整排序,将目标文章强制放在首位
- 可在索引中新增
priority字段,给需要前置推荐的文章设置更高优先级值,搜索时按priority降序+评分降序排列
内容的提问来源于stack exchange,提问作者Ajay Krishnan
相关产品推荐
相关产品推荐

