白话Elasticsearch07- 深度探秘搜索技术之基于term+bool实现的multiword搜索底层剖析_Elasticsearch教程

 

概述

继续跟中华石杉老师学习ES,第七篇

课程地址: https://www.roncoo.com/view/55


普通match转换为term+should

上一篇博文中我们 使用了 搜索标题中包含java或elasticsearch的blog 这个例子

GET /forum/article/_search
{
  "query": {
    "match": {
      "title": "java elasticsearch"
    }
  }
}

我们通过分词器查看,可以知道 es是把 java和elasticsearch放到了倒排索引中,

那es是如何查询的呢? 我们通过 profile

GET /forum/article/_search
{
  "profile": "true", 
  "query": {
    "match": {
      "title": "java elasticsearch"
    }
  }
}

白话Elasticsearch07- 深度探秘搜索技术之基于term+bool实现的multiword搜索底层剖析_数据库_02

或者kibana提供的

白话Elasticsearch07- 深度探秘搜索技术之基于term+bool实现的multiword搜索底层剖析_数据库_03

使用诸如上面的match query进行多值搜索的时候,es会在底层自动将这个match query转换为bool的语法 . bool should,指定多个搜索词,同时使用term query

等同于

GET /forum/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "title": "java"
          }
        },
        {
          "term": {
            "title": "elasticsearch"
          }
        }
      ]
    }
  }
}

and match转换为term+must

搜索标题中包含java和elasticsearch的blog 中的

GET /forum/_search
{
  "query": {
    "match": {
      "title": {
        "query": "java elasticsearch",
        "operator": "and"
      }
    }
  }
}

and match转换为term+must

等同于

GET /forum/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "title": "java"
          }
        },
        {
          "term": {
            "title": "elasticsearch"
          }
        }
      ]
    }
  }
}


minimum_should_match如何转换

搜索包含java,elasticsearch,spark,hadoop,4个关键字中,至少3个的blog


GET /forum/_search
{
  "query": {
    "match": {
      "title": {
        "query": "java elasticsearch hadoop spark",
        "minimum_should_match": 3
      }
    }
  }
}

等同于

GET /forum/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "title": "java"
          }
        },
        {
          "term": {
            "title": "elasticsearch"
          }
        },
        {
          "term": {
            "title": "hadoop"
          }
        },
        {
          "term": {
            "title": "spark"
          }
        }
      ],
      "minimum_should_match": 3
    }
  }
}