term query与match query区别

term query 词匹配询问

match query 部分匹配询问

match query搜索的时候,首先会解析查询字符串,进行分词,然后查询,而term query,输入的查询内容是什么,就会按照什么去查询,并不会解析查询内容,对它分词

官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-term-query.html

官方示例:

PUT my_index
{
  "mappings": {
    "my_type": {
      "properties": {
        "full_text": {
          // 没有特殊说明,查询时会分词
          "type":  "string"  
        },
        "exact_value": {
          "type":  "string",
           // 指明不使用分词
          "index": "not_analyzed"  
        }
      }
    }
  }
}

添加一条数据

PUT my_index/my_type/1
{
  "full_text":   "Quick Foxes!",  
  "exact_value": "Quick Foxes!"   
}

由于full_text字段分词,因此在倒排索引中被默认标准分析器分为quick , foxes

exact_value字段不分词,在倒排索引中该字段的值仍为QuickFoxes!

执行查询

使用term查询exact_value,搜索内容为Quick Foxes!

// 由于exact_value不分词,Quick Foxes!与exact_value的值QuickFoxes!匹配,因此可以匹配
GET my_index/my_type/_search
{
  "query": {
    "term": {
      "exact_value": "Quick Foxes!"  
    }
  }
}

使用term查询full_text,搜索内容为Quick Foxes!

//由于full_text字段默认使用标准分析器分词,在倒排索引中被分为quick和foxes,因此使用 Quick Foxes!匹配不到内容
GET my_index/my_type/_search
{
  "query": {
    "term": {
      "full_text": "Quick Foxes!"  
    }
  }
}

使用term查询full_text,搜索内容为foxes

// 由于full_text字段默认使用标准分析器分词,在倒排索引中被分为quick和foxes,
// 因此使用 foxes可以匹配到
GET my_index/my_type/_search
{
  "query": {
    "term": {
      "full_text": "foxes"  
    }
  }
}

使用match查询full_text,查询内容为Quick Foxes!

// 使用match搜索,先分析搜索字符串Quick Foxes!,对它分词,
// 然后搜索full_text中含有quick或者foxes或者两者都包含的文档,
//由于full_text字在倒排索引中被分为quick和foxes,因此可以匹配到
GET my_index/my_type/_search
{
  "query": {
    "match": {
      "full_text": "Quick Foxes!"  
    }
  }
}

 

你可能感兴趣的:(中间件)