Elasticsearch 多字段查询 best_fields、most_fields、cross_fields,傻傻分不清楚?

简介: 题记Multi-match query 的目的多字段匹配,但 Multi-match query 中的 best_fields, most_fields, cross_fields 分不清楚,都什么含义?下面我们一一举例解读。

image.png

链接

best_fields

为默认值,如果不指定,默认best_fields 匹配。


含义:多个字段中,返回评分最高的。


类似:dis_max query。


等价举例:(两个一起看,加深理解)


默认 best_fields 与 dis_max等价


POST blogs/_search

{

 "query": {

   "multi_match": {

     "type": "best_fields",

     "query": "Quick pets",

     "fields": [

       "title",

       "body"

     ],

     "tie_breaker": 0.2

   }

 }

}

与上述best_fields等价


POST blogs/_search

{

 "query": {

   "dis_max": {

     "queries": [

       {

         "match": {

           "title": "Quick pets"

         }

       },

       {

         "match": {

           "body": "Quick pets"

         }

       }

     ],

     "tie_breaker": 0.2

   }

 }

}

most_fields

含义:匹配多个字段,返回的综合评分(非最高分)


类似:bool + 多字段匹配。


等价举例:(两个一起看,加深理解)


most_fields 与下面的 bool 查询等价。


GET /titles/_search

{

 "query": {

   "multi_match": {

     "query": "barking dogs",

     "type": "most_fields",

     "fields": [

       "title^10",

       "title.std"

     ]

   }

 }

}

与上面的most_fields等价


GET titles/_search

{

 "query": {

   "bool": {

     "should": [

       {

         "match": {

           "title": {

             "query": "barking dogs",

             "boost": 10

           }

         }

       },

       {

         "match": {

           "title.std": "barking dogs"

         }

       }

     ]

   }

 }

}

cross_fields

含义:跨字段匹配——待查询内容在多个字段中都显示。


类似:bool + dis_max 组合。


等价举例:(两个一起看,加深理解)


与下面的bool查询逻辑一致


GET test003/_validate/query?explain=true

{

 "query": {

   "multi_match": {

     "query": "Will Smith",

     "type": "cross_fields",

     "fields": [

       "first_name",

       "last_name"

     ],

     "operator": "and"

   }

 }

}

GET test003/_validate/query?explain=true

返回:


"explanation" : "+blended(terms:[first_name:will, last_name:will]) +blended(terms:[first_name:smith, last_name:smith])"

与上面的cross_fields 基本等价,评分不一致,待深究


POST test003/_validate/query?explain=true

{

 "query": {

   "bool": {

     "must": [

       {

         "dis_max": {

           "queries": [

             {

               "match": {

                 "first_name": "Will"

               }

             },

             {

               "match": {

                 "last_name": "Will"

               }

             }

           ]

         }

       },

       {

         "dis_max": {

           "queries": [

             {

               "match": {

                 "first_name": "Smith"

               }

             },

             {

               "match": {

                 "last_name": "Smith"

               }

             }

           ]

         }

       }

     ]

   }

 }

}

小结

类似辨识度不好区分的 Elastic 知识点,考虑通过实战例子加以区分,实战一把,有助于提升选型效率。


参考:


1、https://zhuanlan.zhihu.com/p/24832190


2、https://github.com/mingyitianxia/deep_elasticsearch


加微信:elastic6(仅有少量坑位了),和 BAT 大佬一起精进 Elastic 技术!

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
数据采集 JSON 数据挖掘
Elasticsearch 的DSL查询,聚合查询与多维度数据统计
Elasticsearch的DSL查询与聚合查询提供了强大的数据检索和统计分析能力。通过合理构建DSL查询,用户可以高效地搜索数据,并使用聚合查询对数据进行多维度统计分析。在实际应用中,灵活运用这些工具不仅能提高查询效率,还能为数据分析提供深入洞察。理解并掌握这些技术,将显著提升在大数据场景中的分析和处理能力。
755 20
|
存储 JSON 监控
大数据-167 ELK Elasticsearch 详细介绍 特点 分片 查询
大数据-167 ELK Elasticsearch 详细介绍 特点 分片 查询
967 4
|
JSON 自然语言处理 算法
ElasticSearch基础2——DSL查询文档,黑马旅游项目查询功能
DSL查询文档、RestClient查询文档、全文检索查询、精准查询、复合查询、地理坐标查询、分页、排序、高亮、黑马旅游案例
ElasticSearch基础2——DSL查询文档,黑马旅游项目查询功能
|
自然语言处理 Java 关系型数据库
ElasticSearch 实现分词全文检索 - 聚合查询 cardinality
ElasticSearch 实现分词全文检索 - 聚合查询 cardinality
532 1
|
自然语言处理 搜索推荐 Java
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(一)
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图
422 0
|
存储 自然语言处理 搜索推荐
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(二)
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(二)
401 0
|
存储 自然语言处理 Java
ElasticSearch 实现分词全文检索 - 经纬度定位商家距离查询
ElasticSearch 实现分词全文检索 - 经纬度定位商家距离查询
389 0
|
自然语言处理 Java
ElasticSearch 实现分词全文检索 - 高亮查询
ElasticSearch 实现分词全文检索 - 高亮查询
295 0
|
缓存 自然语言处理 Java
ElasticSearch 实现分词全文检索 - filter查询
ElasticSearch 实现分词全文检索 - filter查询
230 0
|
自然语言处理 Java
ElasticSearch 实现分词全文检索 - 复合查询
ElasticSearch 实现分词全文检索 - 复合查询
199 0