Elasticsearch(ES)多段查询语法条件详解_第1页
Elasticsearch(ES)多段查询语法条件详解_第2页
Elasticsearch(ES)多段查询语法条件详解_第3页
Elasticsearch(ES)多段查询语法条件详解_第4页
Elasticsearch(ES)多段查询语法条件详解_第5页
已阅读5页,还剩3页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Elasticsearch(ES)多段查询语法条件详解ES多段查询(Multi-SectionQuery)核心是通过组合多个子查询(子句),实现复杂业务场景的精准检索,核心类型分为布尔组合查询(bool)、多字段查询(multi_match)、跨度多词查询(span_multi)三类,以下逐一拆解语法条件、示例及核心注意事项,所有语法适配ES7.x及以上版本,可直接复制使用。一、核心类型1:布尔组合查询(boolquery)——最常用多段查询bool查询是ES多段查询的基础,通过4个子句组合“与/或/非”逻辑,实现多条件叠加检索,支持嵌套使用,可灵活适配绝大多数复杂查询场景,核心是将多个独立查询子句按逻辑关系组合,兼顾相关性评分与过滤需求。1.核心语法结构GET/索引名/_search{"query":{"bool":{"must":[],//必须匹配(AND),参与相关性评分"should":[],//可选匹配(OR),满足则加分,不满足不影响匹配"must_not":[],//必须不匹配(NOT),不参与评分,仅排除文档"filter":[],//必须匹配(AND),不参与评分,结果可缓存,性能更优"minimum_should_match":1,//可选,指定should子句至少匹配的数量/百分比"boost":1.0//可选,给整个bool查询设置权重,影响最终评分}}}2.四大核心子句详解(含示例)(1)must子句(必须匹配,AND)所有must子句必须全部匹配,子句结果会参与相关性评分(_score),适合作为核心检索条件,如关键词匹配、精准匹配等。//示例:查询title含"手机"且content含"5G"的文档GET/products/_search{"query":{"bool":{"must":[{"match":{"title":"手机"}},//全文匹配{"term":{"content.keyword":"5G"}}//精确匹配]}}}(2)should子句(可选匹配,OR)满足任意一个should子句即可,满足数量越多、匹配度越高,文档评分越高;若bool查询中无must/filter子句,默认至少匹配1个should子句(可通过minimum_should_match修改)。//示例:查询title含"手机",且可选匹配品牌为"苹果"或"华为"(至少1个)GET/products/_search{"query":{"bool":{"must":[{"match":{"title":"手机"}}],"should":[{"term":{"brand.keyword":"苹果"}},{"term":{"brand.keyword":"华为"}}],"minimum_should_match":1//强制至少匹配1个should子句}}}(3)must_not子句(必须不匹配,NOT)所有must_not子句必须全部不匹配,不参与相关性评分,仅用于排除不符合条件的文档,如排除下架商品、垃圾内容等。//示例:查询title含"手机",且状态不为"下架"、价格不小于1000的文档GET/products/_search{"query":{"bool":{"must":[{"match":{"title":"手机"}}],"must_not":[{"term":{"status.keyword":"下架"}},{"range":{"price":{"lt":1000}}}]}}}(4)filter子句(过滤匹配,AND)所有filter子句必须全部匹配,不参与相关性评分,查询结果会被ES缓存,性能远优于must子句,适合纯过滤条件(如价格范围、时间范围、状态筛选等)。//示例:查询title含"手机",且价格2000-5000、库存>0的文档(过滤条件不评分)GET/products/_search{"query":{"bool":{"must":[{"match":{"title":"手机"}}],"filter":[{"range":{"price":{"gte":2000,"lte":5000}}},{"term":{"stock":0}}]}}}(5)嵌套bool查询(复杂场景)当业务条件复杂时,可在子句中嵌套bool查询,实现多组逻辑的叠加,如“(A且B)或(C且D)”。//示例:查询(title含"手机"且品牌为苹果)或(title含"平板"且价格<3000)的文档GET/products/_search{"query":{"bool":{"should":[{"bool":{"must":[{"match":{"title":"手机"}},{"term":{"brand.keyword":"苹果"}}]}},{"bool":{"must":[{"match":{"title":"平板"}},{"range":{"price":{"lt":3000}}}]}}],"minimum_should_match":1}}}二、核心类型2:多字段查询(multi_matchquery)——多字段统一检索multi_match查询基于match查询扩展,支持在多个字段上执行相同的检索条件,无需重复编写多个match子句,可通过type参数控制匹配逻辑,适用于多字段模糊检索场景(如搜索关键词同时匹配标题、内容、作者等)。1.核心语法结构GET/索引名/_search{"query":{"multi_match":{"query":"检索关键词",//统一检索的关键词"fields":["字段1","字段2^权重","*_suffix"],//检索字段,支持通配符和权重设置"type":"best_fields",//匹配类型,核心可选值如下"tie_breaker":0.3,//可选,当type为best_fields时,用于平衡多字段评分"operator":"or"//可选,关键词分词后的匹配逻辑(or/and)}}}2.核心参数详解fields:指定检索的字段,支持3种写法:直接指定字段:["title","content"]通配符匹配:["title","*_name"](匹配title、first_name、last_name等字段)权重设置:["subject^3","message"](subject字段权重是message的3倍,权重越高,评分影响越大)type(匹配类型,核心可选):best_fields(默认):匹配任意字段,取匹配度最高的字段评分作为最终评分,适合“关键词在单个字段中匹配更有意义”的场景(如“brownfox”在单个字段比分散在两个字段更相关)。most_fields:匹配任意字段,累加所有匹配字段的评分,适合多字段协同匹配场景。cross_fields:将同分词器的多个字段视为一个整体,关键词的每个词可在不同字段中匹配,适合多字段联合检索(如“willsmith”可在first_name和last_name中分别匹配)。phrase:在每个字段上执行短语匹配,取最佳字段评分。bool_prefix:在每个字段上执行前缀布尔匹配,累加所有匹配字段的评分。3.示例//示例1:在title、content字段检索"elasticsearch",title权重是content的2倍GET/articles/_search{"query":{"multi_match":{"query":"elasticsearch","fields":["title^2","content"],"type":"best_fields","tie_breaker":0.3}}}//示例2:用通配符匹配所有以"name"结尾的字段,检索"willsmith"GET/users/_search{"query":{"multi_match":{"query":"willsmith","fields":["title","*_name"],"type":"cross_fields"}}}三、核心类型3:跨度多词查询(span_multiquery)——跨度查询扩展span_multi查询用于将多词查询(如wildcard、fuzzy、prefix、range、regexp)包装为跨度查询,支持嵌套使用,适合需要精确控制关键词位置关系的检索场景,需注意控制匹配术语数量,避免超出ES默认限制。1.核心语法结构GET/索引名/_search{"query":{"span_multi":{"match":{"多词查询类型":{//可选:prefix、wildcard、fuzzy、range、regexp"字段名":{"value":"检索值","boost":1.08//可选,设置查询权重}}}}}}2.示例//示例1:前缀匹配,查询user.id以"ki"开头的文档,设置权重1.08GET/users/_search{"query":{"span_multi":{"match":{"prefix":{"user.id":{"value":"ki","boost":1.08}}}}}}//示例2:模糊匹配,查询title含"elastc"(允许1个字符错误)的文档GET/articles/_search{"query":{"span_multi":{"match":{"fuzzy":{"title":{"value":"elastc","fuzziness":1}}}}}}四、多段查询核心注意事项(避坑必看)性能优化:纯过滤条件(无需评分)优先放filter子句,利用ES缓存提升查询速度;避免用must做过滤,减少算分开销。字段类型匹配:term/terms查询适用于keyword类型(精确匹配),match查询适用于text类型(全文检索),混用会导致查询无结果。minimum_should_match设置:当bool查询只有should子句时,默认需匹配1个;若有must/filter子句,默认可匹配0个,需根据业务需求手动设置。多字段权重控制:通过fields参数的“^权重值”调整字段重要性,权重值越大,对最终评分影响越大。子句数量限制:多段查询的子句总数默认不超过1024(由indi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论