首页 > 分享 > 查询字符串的通用语法规则

查询字符串的通用语法规则

函数列表

功能概览

不同搜索功能对字段搜索和全文搜索的支持情况如下表所示。

功能

字段搜索

全文搜索

功能

字段搜索

全文搜索

子串搜索

支持

支持

通配符*?搜索

支持

支持

完全匹配搜索

支持

不支持

正则表达式搜索

支持

不支持

数值范围搜索

支持

不支持

数值比较

支持

不支持

关系and、or、not及组合

支持

支持

字符转义

在字符串查询语法中,需要对一些特殊字符,例如星号(*)、反斜线()等进行转义操作。

字段名转义

字段名不能使用半角双引号("")包裹,包含特殊字符时使用反斜线()转义。例如:

*(1+1)?: abc:使用反斜线()转义。

__tag__:__container_name__: abc:使用反斜线()转义。

中文字段: abc:中文不需要转义。

"content": abc:非法定义,字段名不能用半角双引号("")包裹。

搜索值转义

包含半角双引号("")或反斜线()时需用反斜线()转义,例如content: "abc"xy\z"。

说明

搜索值只能使用半角双引号("")包裹。您可以使用单引号('')包裹外层字符串,使用半角双引号("")包裹里层搜索值,例如:e_search("domain: '/url/test.jsp'")是错误的,正确的为e_search('domain: "/url/test.jsp"')。

搜索星号(*)或半角问号(?)时需要使用反斜线()转义,否则会被视为通配符匹配。

只包含中文、字母、数字、下划线(_)、短划线(-)、星号(*)或半角问号(?)这些特殊字符时,不需要用半角双引号("")包裹,其他情况需要使用半角双引号("")包裹。例如:

status: "*?()[]:=":使用半角双引号("")包裹,并使用反斜线()对星号(*)、半角问号(?)进行转义,其他字符不用转义。

content: ()[]:=:非法定义,需要使用半角双引号("")包裹。

status: active*test、status: active?test:字段值仅包含星号(*)、半角问号(?)及字母,只需要对星号(*)或半角问号(?)进行转义,不需要使用半角双引号("")包裹。

子串搜索

全文搜索

在所有字段中搜索子串。

语法格式

示例

e_search('"错误"'):搜索中文子串。

e_search('"active error"'):搜索完整带空格的子串。

e_search('active error'):多个子串搜索,多个子串之间默认为OR关系。

字段搜索

在特定字段中搜索子串。

语法格式

示例

e_search('status: active'):子串搜索。

e_search('author: "john smith"'):带空格子串搜索。

说明

e_search('field: active error')相当于field:active OR "error",表示在field字段中搜索active或者全文搜索error。

通配符搜索

星号(*)表示零个或多个字符串,半角问号(?)表示一个字符,也可以表示一个宽字符(例如中文字符)。

全文搜索

在所有字段中搜索子串。

语法格式

示例

e_search('active*test'):匹配零到多个字符,因为字符串中有星号(*),所以该字符串不需要使用半角双引号("")包裹。

e_search('发生*错误'):匹配零到多个字符,可以匹配发生错误,发生严重错误等。

e_search('active?good'):匹配一个字符,因为字符串中有半角问号(?),所以该字符串不需要使用半角双引号("")包裹。

e_search('ac*tive?good'):完全匹配。

e_search('ac*tive??go*od'):支持多个混合使用。

字段搜索

在特定字段中搜索子串。

语法格式

示例

e_search('status: active*test'):匹配零到多个字符。

e_search('status: active?good'):匹配一个字符。

完全匹配

完全匹配要求对字段值从开始到结尾完全匹配。

语法格式

示例

e_search('author== "john smith"'):author字段完全等于john smith。

e_search('status== ac*tive?good'):与通配符结合使用。

正则表达式匹配

正则表达式匹配是比通配符匹配更强大的匹配方式。

语法格式

e_search('字段名~=正则表达式字符串')

说明

由于正则表达式中可能包含反斜线(),推荐使用r进行不转义。

默认为部分匹配,如果需要完全匹配,需要在开头和结尾加上^和$。

示例

e_search('status~= "d+"'):status字段包含数字。

e_search('status~= "^d+$"'):status字段等于数字。

数值比较

对数值进行比较。

数值直接比较

使用>、>=、=、<、<=进行比较。

e_search('age >= 18') # >=18 e_search('age > 18') # > 18 e_search('age = 18') # = 18 e_search('age <= 18') # <=18 e_search('age < 18') # < 18

数值范围比较:

使用闭区间,支持使用星号(*)表示无边界。

e_search('count: [100, 200]') # >=100 and <=200 e_search('count: [*, 200]') # <=200 e_search('count: [200, *]') # >=200

逻辑关系

支持任意搜索之间的逻辑关系,也支持用圆括号()进行嵌套。

逻辑关系

关键字

逻辑关系

关键字

and,AND,&&等,不区分大小写。

or,OR等,不区分大小写。

not,NOT,!等,不区分大小写。

样例:

e_search('abc OR xyz') # 关系运算符不区分大小写 e_search('abc and (xyz or zzz)') e_search('abc and not (xyz and not zzz)') e_search('abc && xyz') # and e_search('abc || xyz') # or e_search('abc || !xyz') # or not

子串匹配也支持逻辑关系:

e_search('field: (abc OR xyz)') # 字段field包含abc或xyz e_search('field: (abc OR not xyz)') # 字段field包含abc或不包含xyz e_search('field: (abc && !xyz)') # 字段field包含abc且不包含xyz

字段判断

使用搜索字符串对字段进行判断。

e_search('field: *'):字段存在。

e_search('not field:*'):字段不存在。

e_search('not field:""'):字段不存在。

e_search('field: "?"'):字段存在且值不为空。

e_search('field==""'):字段存在且值为空。

e_search('field~=".+"'):字段存在且值不为空。

e_search('not field~=".+"'):字段不存在或值为空。

e_search('not field==""'):字段不存在或值不为空。

相关知识

简单的查询语法
完整 Lucene 查询语法的示例
字符串查询算法
当向搜索字符串添加1个或2个字符时,为什么这个MySQL查询花费的时间会不成比例地长?
使用 SQL 查询编辑器进行查询
字符串
SQL根据分隔的字符串,查询并组合查询结果的解决方案(转)
mysql创建索引的原则 mysql创建索引的语法
现代汉语(语法篇)
花朵上的大青虫

网址: 查询字符串的通用语法规则 https://m.huajiangbk.com/newsview105193.html

所属分类:花卉
上一篇: 下面哪一项可以正确声明一个大小为
下一篇: 公共建筑用能分项计量系统