ELK:match 的底层转换

188 阅读1分钟

在ES中,执行match搜索的时候,ES底层通常都会对搜索条件进行底层转换,来实现最终的搜索结果。如:

GET /student/java/_search


{


  "query": {


    "match": {

    "remark": "java developer"

    }

  }

}

转换后是:

GET student/java/_search

{

  "query": {

    "bool": {

      "should": [

        {

          "term": {

            "remark": "java"

          }

        },

        {

          "term": {

            "remark": {

              "value": "developer"

            }

          }

        }

      ]

    }

  }

}


GET /student/java/_search

{

  "query": {

    "match": {

      "remark": {

        "query": "java developer",

        "operator": "and"

      }

    }

  }

}

转换后是:

GET student/java/_search

{

  "query": {

 "bool": {

      "must": [

        {

          "term": {

            "remark": "java"

          }

        },

        {

          "term": {

            "remark": {

              "value": "developer"

            }

          }

        }

      ]

    }

  }

}

GET student/java/_search

{

  "query": {

    "match": {

      "remark": {

        "query": "java architect assistant",

        "minimum_should_match": "68%"

      }

    }

  }

}

转换后为:

GET student/java/_search

{

  "query": {

    "bool": {

      "should": [

        {

          "term": {

            "remark": "java"

          }

        },

        {

          "term": {

   "remark": "architect"

          }

        },

        {

          "term": {

            "remark": "assistant"

          }

        }

      ],

      "minimum_should_match": 2

    }

  }

}

建议,如果不怕麻烦,尽量使用转换后的语法执行搜索,效率更高。

如果开发周期短,工作量大,使用简化的写法。