Dav*_*itz 14
为什么在某些情况下我们应该更喜欢has而不是contains?
TL;DR:性能(使用索引与数据扫描)。
术语是字母数字字符的序列(请参阅什么是术语?)。
一些例子:
Azure 数据资源管理器(AKA ADX、AKA Kusto)对每个术语进行索引,只要其长度为 3 个字符或更多(对于存储引擎 v3。对于 v2,它是 4 个字符)。
索引(全文搜索索引)使 ADX 能够在亚秒/秒内返回搜索结果,即使搜索是在 PB 上完成的。
截至今天,该索引可用于整个术语搜索或前缀搜索。
以下是contains & has对于不同搜索字符串的行为:
PS 即使一个术语被索引,也可能不会使用索引,例如,当一个术语非常常见时,直接扫描数据本身可能比使用索引更便宜。
以下是通过contains而不是has找到的搜索字符串的一些示例。
请注意以下事项:
hell或hello)。hell。hello只要它不是较长字母数字序列的一部分,就会找到所搜索的子字符串。datatable(txt:string)
[
"Hello World"
,"<Hello-World>"
,"*Hello*World*"
,"?Hello%World!"
,"_Hello_World_"
,"123Hello-World456"
,"abcHello Worldxyz"
,"HelloWorld"
]
| extend contains_hell = txt contains "hell"
,contains_hello = txt contains "hello"
,has_hell = txt has "hell"
,has_hello = txt has "hello"
Run Code Online (Sandbox Code Playgroud)
| TXT | 包含地狱 | 包含_hello | 有地狱 | 有_你好 |
|---|---|---|---|---|
| 你好世界 | 真的 | 真的 | 错误的 | 真的 |
| <你好世界> | 真的 | 真的 | 错误的 | 真的 |
| *你好世界* | 真的 | 真的 | 错误的 | 真的 |
| ?你好世界! | 真的 | 真的 | 错误的 | 真的 |
| 你好世界 | 真的 | 真的 | 错误的 | 真的 |
| 123Hello-World456 | 真的 | 真的 | 错误的 | 错误的 |
| abcHello Worldxyz | 真的 | 真的 | 错误的 | 错误的 |
| 你好世界 | 真的 | 真的 | 错误的 | 错误的 |
| 归档时间: |
|
| 查看次数: |
9845 次 |
| 最近记录: |