Elasticsearch核心区别:精准匹配 vs 全文检索匹配(原理+场景+API+流程图)
Elasticsearch核心区别精准匹配 vs 全文检索匹配原理场景API流程图一、前言二、基础定义两种匹配方式是什么2.1 精准匹配Exact Matching2.2 全文检索匹配Full-text Matching三、核心区别总览最关键一张表四、底层原理流程图4.1 精准匹配原理term4.2 全文检索原理match五、详细对比5大核心差异5.1 分词处理区别最根本5.2 字段类型区别5.3 查询结果区别5.4 排序方式区别5.5 性能区别六、实战代码对比6.1 数据准备6.2 精准匹配term—— 查询phone6.3 全文检索match—— 查询name6.4 错误示范term 查询 text 字段七、使用场景什么时候用哪种7.1 必须使用精准匹配term的场景7.2 必须使用全文检索match的场景八、一句话总结最容易记住九、最终口诀The Begin点点关注收藏不迷路一、前言在 Elasticsearch 中匹配方式直接决定查询结果是否准确、性能是否高效。很多新手分不清精准匹配和全文检索匹配经常出现明明有数据却查不出来查询结果不准确用错API导致性能极差本文从原理、适用字段、API、场景、流程图全方位对比让你彻底掌握两者区别。二、基础定义两种匹配方式是什么2.1 精准匹配Exact Matching不拆分文本完全一致才匹配不对查询词分词要求字段内容完全一样用于keyword字段代表APIterm、terms2.2 全文检索匹配Full-text Matching先分词再匹配任意/全部词语对查询文本分词匹配包含词语的文档用于text字段代表APImatch、match_phrase三、核心区别总览最关键一张表序号对比维度精准匹配全文检索匹配1是否分词不分词分词2匹配规则完全一致才匹配包含词语即可匹配3适用字段类型keywordtext4典型APIterm、termsmatch、match_phrase5结果排序不计算得分按相关性_score排序6用途过滤、精确查询、ID、状态搜索、模糊查询、内容检索7性能⚡ 极快较快8示例查询手机号13800138000查询内容包含“电脑”“手机”四、底层原理流程图4.1 精准匹配原理term输入查询词张三不分词去索引中查找完全“张三”的数据只有完全一致才返回4.2 全文检索原理match输入查询词苹果手机分词苹果、手机分别匹配两个词语包含任意词语都返回按相关性打分排序五、详细对比5大核心差异5.1 分词处理区别最根本精准匹配查询词原封不动去匹配全文检索查询词会被分词器拆分成多个单词5.2 字段类型区别精准匹配必须用于keyword全文检索必须用于text5.3 查询结果区别精准匹配结果绝对准确不多查、不漏查全文检索结果智能匹配包含关键词就返回5.4 排序方式区别精准匹配不计算分数默认按插入顺序全文检索按相关性得分排序越匹配越靠前5.5 性能区别精准匹配性能极高消耗资源极低全文检索需要分词评分性能略低六、实战代码对比6.1 数据准备PUT/user{mappings:{properties:{name:{type:text,fields:{keyword:{type:keyword}}},phone:{type:keyword}}}}PUT/user/_doc/1{name:张三,phone:13800138000}6.2 精准匹配term—— 查询phoneGET/user/_search{query:{term:{phone:13800138000}}}✅能查到完全一致。6.3 全文检索match—— 查询nameGET/user/_search{query:{match:{name:张三}}}✅能查到分词匹配。6.4 错误示范term 查询 text 字段GET/user/_search{query:{term:{name:张三}}}❌查不到因为term不分词无法匹配分词后的text字段。七、使用场景什么时候用哪种7.1 必须使用精准匹配term的场景查询ID、订单号、手机号、身份证查询状态值published、draft过滤、分类、枚举需要100%准确的查询7.2 必须使用全文检索match的场景搜索文章标题、内容搜索商品名称、描述搜索评论、日志需要模糊、智能、相关的搜索八、一句话总结最容易记住精准匹配 完全一样才查出来 keyword term全文检索 包含关键词就查出来 text match九、最终口诀精准匹配查号码完全一致才返回全文检索搜内容分词匹配智能排字段类型别用错term对应keywordmatch对应textThe End点点关注收藏不迷路