You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Search:多词字符串搜索后补充单个词匹配结果

实现完整字符串优先+分词匹配的排序逻辑

嘿,这个需求在Azure Search里完全能搞定,我给你两种实现思路,从快速上手到灵活扩展都有,照着来就行:


方法一:直接用查询语法快速实现

这是最直接的方式,不用改索引配置,直接构造查询字符串就行。当用户输入my search string时,你生成这样的查询语句:

"\"my search string\"^3 OR my search string"

我给你拆解下:

  • "my search string" 是短语搜索,只会命中包含这个完整连续字符串的文档
  • ^3 是权重提升,给短语匹配的文档乘以3倍的搜索得分,确保它们稳稳排在最前面
  • OR my search string 是常规分词匹配,会命中包含这三个词中任意一个(或多个)的文档

另外,记得根据你的需求设置searchMode参数:

  • 如果要返回包含所有单个词的文档,用searchMode=all
  • 如果只要包含任意一个单个词的文档,用searchMode=any

默认的standard.lucene分析器就支持分词,所以不用额外配置字段分析器。

方法二:自定义评分配置(适合复杂场景)

如果以后你需要调整权重规则、扩展其他匹配逻辑,自定义评分配置会更灵活:

  1. 修改索引定义,添加评分配置
    在你的索引JSON里加入一个评分配置,比如:

    "scoringProfiles": [
      {
        "name": "PhraseFirstScoring",
        "functions": [
          {
            "type": "magnitude",
            "boost": 3,
            "interpolation": "constant",
            "expression": "search.ismatchphrase('my search string', 'your_target_field')"
          }
        ]
      }
    ]
    

    这个配置的核心是search.ismatchphrase函数——只要文档的your_target_field里包含完整的"my search string"短语,就给它加3倍的得分权重。

  2. 查询时指定评分配置
    调用Azure Search API的时候,加上scoringProfile=PhraseFirstScoring参数,查询字符串用my search string就行。这样包含完整短语的文档会因为权重加成得分更高,自动排在前面,后面跟着分词匹配的文档。


小提醒

  • 如果要搜索多个字段,记得用searchFields参数指定,比如searchFields=title,description
  • 测试的时候可以查看返回结果里的@search.score字段,确认完整匹配的文档得分确实比分词匹配的高
  • 如果需要严格把"完整匹配组"和"分词匹配组"分开显示(比如先全显示完整匹配,再显示分词匹配,不按得分混合),可以考虑分两次查询:先查短语搜索,再查分词搜索,把两个结果集拼接起来就行,不过这种方式要注意分页的处理哦。

内容的提问来源于stack exchange,提问作者77Vetter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:16:58