ElasticSearch(es) term查询

ES中term对搜索文本不分词,直接拿去倒排索引中匹配,你输入的是什么,就去匹配倒排索引什么,相当于SQL中的单个where条件。

非字符串查询

GET /products/_search
{
  "query": {
    "term": {
      "proid": "1"
    }
  }
}

查询产品id等于1的产品,相当于SQL中的单个where条件。

精确查询

POST /products/_search
{
  "query": {
    "term": {
      "desc": {
         "value": "iPhone"
      }
    }
  }
}

查询包含iPhone的内容,注意如果内容中包含IPHONE的内容是不会被查询出来,因为term对搜索的词不做任何处理,包括大小写转换,去除语义词等等。

terms多值

GET /products/_search
{
  "query": {
    "terms": {
      "proid": [100,101]
    }
  }
}

字段有一多个值时候,用terms关键词查询,后跟数组

term多个字段

GET /products/_search
{
  "query": {
    "term": {
      "proid": 1000
    },
    "term": {
      "proname": "java学习网站"
    }
  }
}

多个字段一起条件查询

总结

1、term 和 terms 是包含(contains) 操作,而非等值(equals) (判断)

2、不知道分词器的存在,所以不会去分词,

3、所谓的包含是文档分词结果某个分词是否相等,即文档是否包含这个分词

4、因为是在分词结果中匹配,所以大写要转换为小写,大写字母是匹配不到

ElasticSearch中term是代表完全匹配,即不进行分词器分析,文档中必须包含整个搜索的词汇。一般字段只有一个值时候,用term关键词查询。