- term查询是完全匹配
- term查询不会再进行分词,而是直接去分词库进行完全匹配查询;
- user_log表中查询name
GET /user_log/_mapping
#返回如下
{
"user_log" : {
"mappings" : {
"properties" : {
"age" : {
"type" : "long"
},
"name" : {
"type" : "text",
"fields" : {
"keyword" : { #这行的keyword是字段名,全称是name.keyword
"type" : "keyword", #这行的keyword是指类型
"ignore_above" : 256 #这里的ignore_above下面会讲
}
}
}
}
}
}
}
- 查询语法
- 语法:
#term查询
GET /user_log/_search #
{
"query": {
"term": {
"name": {
"value": "张三"
}
}
}
}
- 查询分析:上述查询是查不出张三这个人的,因为ES把keyword类型的值当作词根存在倒排索引中,不进行分词,想要查询需要修改为以下语法
#term查询
GET /user_log/_search #
{
"query": {
"term": {
"name": {
"value": "张三"
}
}
}
}
二.terms
1.terms 特点
- 查询某个字段里含有多个关键词的文档
- 相对于term来,terms是在针对一个字段包含多个值的时候使用
- 通俗来说就是term查询一次可以匹配一个条件,terms一个可以匹配多个条件;
#terms查询
GET /user_log/_search
{
"query": {
"terms":{
"name": [
"张三"
"李四"
]
}
}
}
}
以上后面变成了中括号!!!也就是数组传值,表达为name为"张三"或 “李四”



