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

KQL中where * contains与search运算符是否等效?对应查询是否相同?

KQL中where * contains与search的行为差异

这两个运算符不完全等价,你给出的示例查询也存在明显行为差异,具体区别如下:

  • 匹配逻辑核心差异

    • where * contains "foo":对所有列执行无边界子串匹配,只要任意列的文本里包含连续的"foo"字符序列(大小写不敏感)就会返回记录,比如列值为"foobar"时会被匹配。
    • search "foo":默认是词级全文搜索,仅匹配包含独立"foo"词的记录(词由非字母数字字符分隔),不会匹配"foobar"这类把"foo"作为子串但并非独立词的内容。如果要让search实现和where * contains完全一致的子串匹配,需要写成search contains "foo"。
  • 动态类型处理不同

    • where * contains对数组、对象这类动态类型,只会检查其序列化后的完整文本是否包含子串,不会展开内部元素。
    • search会自动展开动态类型的内部元素(比如数组的每个元素、对象的每个属性值)进行匹配,只要内部元素符合条件就会返回整条记录。
  • 性能与索引利用差异

    • where * contains会遍历所有列做逐行子串检查,无法借助全文索引加速,在大数据集上性能表现较差。
    • search是专门的全文搜索运算符,会优先使用表的全文索引(如果已启用),查询效率更高。
  • 默认返回列不同

    • search默认会在结果中添加$table列,显示匹配记录来自哪个表(在union *场景下实用性很强)。
    • where * contains不会自动返回该列,需要手动添加| project $table, *这类语句才能获取。

综上,如果你的需求是匹配任意列中包含"foo"子串的所有记录,和where * contains "foo"完全等价的search写法是:

union *
| search contains "foo"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 06:05:34