资讯动态

【搜索引擎】Lucene查询语法

发布时间:2026/11/6 3:46:13 来源:尧图企业网站定制
Lucene 查询语法Lucene 查询语法是 Elasticsearch 的底层查询语言Kibana 的 Lucene 模式和 ES 的query_string查询都基于此语法。语法概览Lucene 查询语法分为两大类查询类型语法说明Term 查询field: value精准匹配不分词Phrase 查询field: hello world短语匹配按完整顺序匹配通配符查询field: hel*o*匹配任意字符?匹配单个字符模糊查询field: hello~基于编辑距离的模糊匹配范围查询field:[1 TO 10]数值/日期范围布尔查询AND/OR/NOT逻辑组合正则查询field:/regex/正则表达式匹配基础语法Term 查询词条匹配不分词精确匹配整个字段值status: 200 service: user-service注意Term 查询不会对搜索词分词。service: user-service不会匹配user或service。Phrase 查询短语匹配用双引号包裹按完整顺序匹配message: connection timeout匹配connection timeout occurred不匹配timeout connection顺序不对不匹配connection reset timeout中间有其他词短语邻近度~后跟数字表示允许的词间距message: connection timeout~3表示connection和timeout之间最多允许 3 个词匹配如connection was reset due to timeout。通配符查询通配符含义示例*匹配 0 个或多个字符uri: *app*?匹配 1 个字符uri: my-service-?edia# 匹配以 app 开头的 URL uri: app* # 匹配任意位置包含 app 的 URL uri: *app* # 匹配单个字符差异 service: user-?ervice性能提示以*开头的通配符查询性能较差ES 需要扫描所有词项。尽量避免*xxx形式。模糊查询~表示基于**编辑距离Levenshtein Distance**的模糊匹配# 默认允许 2 个字符差异 message: error~ # 指定编辑距离为 1 message: error~1查询编辑距离匹配示例error~2error, errors, terror, mirrorerror~11error, errorserror~00error等同 Term 查询编辑距离将一个词变成另一个词所需的最少操作数插入、删除、替换。范围查询闭区间[ ]# 数值范围包含边界 response.time:[100 TO 500] # 日期范围 timestamp:[2026-07-31T00:00:00 TO 2026-07-31T23:59:59]开区间{ }# 不包含边界 response.time:{100 TO 500} # 混合使用 response.time:[100 TO 500}开放范围# 大于等于 100 response.time:[100 TO *] # 小于 500 response.time:[* TO 500]日期数学ES 支持日期数学表达式timestamp:[now-1h TO now] timestamp:[now-7d TO now] timestamp:[now/d TO now] # 今天 0 点到现在 timestamp:[now-1d/d TO now-1d/d] # 昨天 0 点到昨天结束表达式含义now当前时间now-1h1 小时前now-1d1 天前now-7d7 天前now/d今天 0 点向下取整到天now1d/d明天 0 点布尔查询运算符运算符说明示例AND同时满足status:200 AND service:userOR满足其一status:200 OR status:201NOT排除status:200 NOT service:user必须包含status:200 service:user-必须排除status:200 -service:user注意Lucene 中AND、OR、NOT必须大写小写会被当作普通词项。组合查询# 括号控制优先级 (status:200 OR status:201) AND service:user-service # 和 - 简写 status:200 -service:order-service默认运算符未指定运算符时默认为OR# 以下两种写法等价 status:200 status:201 status:200 OR status:201可通过 ES 的default_operator参数修改为AND。字段存在性# 字段存在有值 _exists_:uri # 字段不存在 _missing_:uri注意ES 6.x 中_exists_和_missing_已废弃改用# ES 6.x 写法 uri:* # 字段存在 NOT uri:* # 字段不存在正则查询用/包裹正则表达式# 匹配以 myapp 开头的服务名 service:/myapp-.*/ # 匹配数字结尾 uri:/.*[0-9]$/限制Lucene 正则不支持^和$锚定符默认全匹配。不支持反向引用和非贪婪量词。转义特殊字符以下字符在 Lucene 中有特殊含义需用\转义 - || ! ( ) { } [ ] ^ ~ * ? : \ /示例# 转义 URL 中的特殊字符 uri: https\:\/\/example\.com\/api # 转义括号 message: error\(timeout\)分词与匹配text 字段 vs keyword 字段字段类型查询行为示例text搜索词会被分词分别匹配message: connection timeout匹配包含connection或timeout的文档keyword搜索词不分词整体匹配uri.keyword: http://example.com精准匹配完整 URL分词器影响text字段经过分词器处理后查询时也会分词# 假设 message 是 text 类型内容为 Connection Timeout Error message: connection timeout # 分词后匹配 connection 和 timeout能命中 message: Connection Timeout # 大小写不敏感取决于分词器能命中 message: connectiontimeout # 不会被分词为两个词不命中完整示例示例一查找错误日志# 查找 500 错误且包含 timeout 的日志 status:500 AND message:*timeout* # 查找非 200 的响应 NOT status:200 # 查找 4xx 或 5xx 错误 status:[400 TO 499] OR status:[500 TO 599]示例二按时间范围和服务名查询# 查找最近 1 小时 user-service 的日志 timestamp:[now-1h TO now] AND service:user-service示例三排除特定路径# 查找所有日志但排除健康检查 NOT uri:*health*示例四多字段组合查询# user-service 的 500 错误排除 /api/health 路径 service:user-service status:500 -uri:*health*示例五模糊匹配 范围# 响应时间大于 500ms 且消息类似 timeout response.time:[500 TO *] AND message:timeout~2KQL vs Lucene 对比特性KQLLucene字段匹配field: valuefield: value多值 ORfield: (a, b)field:(a OR b)逻辑运算and/or/not不区分大小写AND/OR/NOT必须大写范围查询field: [1 TO 10]field:[1 TO 10]嵌套查询支持嵌套对象不支持字段存在field: *_exists_:field旧/field:*新默认运算符OROR可读性更高较低适用场景Kibana 查询栏query_stringDSL / Kibana Lucene 模式建议在 Kibana 中优先使用 KQL语法更友好在 ES DSL 的query_string中使用 Lucene 语法。在 ES DSL 中使用Lucene 语法通过query_string在 ES DSL 中使用GET/_search{query:{query_string:{query:status:200 AND service:user-service,default_field:message}}}常用参数参数说明默认值queryLucene 查询语句-default_field未指定字段时的默认搜索字段*所有字段default_operator默认运算符ORallow_leading_wildcard是否允许*开头的通配符trueanalyze_wildcard是否对通配符查询分词falseminimum_should_matchOR 条件最少匹配数1示例GET/_search{query:{query_string:{query:(status:200 OR status:201) AND service:user-service,default_operator:AND}},size:10,sort:[{timestamp:desc}]}学习参考Lucene Query Parser 语法ES query_string 文档ES 日期数学

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑