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

Elasticsearch含连字符文档的match_phrase与wildcard查询失效问题

问题:禁用模糊搜索时含连字符字段的匹配异常

需求场景

用户在前端禁用模糊搜索后,后端需执行字面匹配逻辑,匹配name或description字段中包含查询词的文档。

初始实现(match_phrase)

后端执行的查询逻辑代码:

$query['query']['bool']['must'][] = [
    'bool' => [
        'should' => [
            ['match_phrase' => ['name' => $param]],
            ['match_phrase' => ['description' => $param]],
        ],
        'minimum_should_match' => 1,
    ],
];

针对name字段为Evo-Singularity的目标文档,测试结果如下:

  • evo:匹配成功
  • evo-:匹配成功
  • evo-sing:无匹配结果
  • singularity:匹配成功

改用wildcard查询的问题

为解决上述部分查询无结果的问题,尝试改用wildcard查询:

$param = '*'.$param.'*';
// 无模糊搜索 - 执行字面匹配
$query['query']['bool']['must'][] = [
    'wildcard' => [
         'name' => $param
    ],
    'wildcard' => [
         'description' => $param
    ],                
];

测试结果仍存在异常:

  • evo:匹配成功
  • evo-:无匹配结果
  • evo-sing:无匹配结果
  • singularity:无匹配结果

控制台测试验证

可正常匹配的查询

使用match查询能成功匹配目标文档:

{
  "query": {
    "match": {
      "name": "evo-singularity"
    }
  }
}

无结果的wildcard查询

以下两种wildcard查询均无法匹配目标文档:

{
  "query": {
    "wildcard": {
      "name": {
        "value": "*evo\\-singularity*",
        "boost": 1.0,
        "rewrite": "constant_score"
      }
    }
  }
}
{
  "query": {
    "wildcard": {
      "name": {
        "value": "*evo*singularity*",
        "boost": 1.0,
        "rewrite": "constant_score"
      }
    }
  }
}

仅能匹配的wildcard查询

仅当查询词为*singularity*时,wildcard查询可匹配目标文档:

{
  "query": {
    "wildcard": {
      "name": {
        "value": "*singularity*",
        "boost": 1.0,
        "rewrite": "constant_score"
      }
    }
  }
}

目标文档示例

"_source": {
          "type": "Trap Card",
          "description": "Target 1 \"Evoltile\" monster and 1 \"Evolsaur\" monster in your Graveyard; Special Summon 1 \"Evolzar\" Xyz Monster from your Extra Deck, and if you do, attach those monsters to it as Xyz Materials.",
          "name": "Evo-Singularity",
        },

异常规律总结

含「空格-空格」格式的文档(如vanquish soul - kaiser)搜索正常,但连字符无空格包围的文档(如Evo-Singularity)在禁用模糊搜索时匹配异常。当前索引的分析器及映射配置已明确,需解决连字符字段的字面匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 19:35:08