elasticSearch之查询

查询(term):被查询词不会被分词,作为关键字查询
GET /users/_doc/_search
{
  "query": {
    "term": {
      "name":{
        "value": "张三"
      }
    }
  }
}

范围查询(range)
GET /users/_doc/_search
{
  "query":{
    "range":{
      "age":{
        "gt": 20,
        "lt": 30
      }
    }
  }
}
前缀查询(prefix):匹配不被分词的前缀或者
是text类型被分词之后的每个词前缀匹配
GET /users/_doc/_search
{
  "query":{
    "prefix":{
      "address":{
        "value": "南"
      }
    }
  }
}
通配符查询(wildcard):匹配符?只能匹配一个,*匹配0或者多个
不会不分词的类型(除text)直接匹配,text类型匹配被分词之后的所有词
GET /users/_doc/_search
{
  "query":{
    "wildcard":{
      "id":{
        "value": "1*"
      }
    }
  }
}
_id查询(ids):根据_id查询
GET /users/_doc/_search
{
  "query":{
    "ids":{
      "values":["1","-1lVUX0BO8r8S-6T4tkD"]
    }
  }
}
模糊查询(fuzzy):与mysql的模糊查询截然不同
当查询词长度为小于等于2,不允许模糊查 0
当查询词长度为3到5之间,许模糊查 0、1
当查询词长度为大于5,不允许模糊查 0、1、2

参数

fuzziness:允许有几个字符的偏差
prefix_length:指定前几个字符不允许出现偏差
max_expansions:匹配的结果数(默认50)

GET /users/_doc/_search
{
  "query":{
    "fuzzy":{
      "description": {
        "value": "elasticsearch"
        #"value": "elasticsoarch" 1
        #"value": "elasticsoorch" 2
        #"value": "elasticsoooch" 3查不到
        #"value": "el" 0
        #"value": "elast" 0
        #"value": "elost" 1
        #"value": "eloot" 2 查不到
      }
    }
  }
}
布尔查询(bool):实现复杂查询
	must:&&
	should:||
	must_not:!
查询名字中含张并且年龄大于30
#查询名字中含张并且年龄大于30
GET /users/_doc/_search
{
  "query":{
    "bool":{
      "must":[
        {
          "term":{
            "name": "张"
          }
        },
        {
           "range":{
          "age":{
            "gt":30
          }
        }
        }
      ]
    }
  }
}
#查询名字中含张或者年龄大于20
#查询名字中含张或者年龄大于20
GET /users/_doc/_search
{
  "query":{
    "bool":{
      "should":[
        {
          "term":{
            "name": "张"
          }
        },
        {
           "range":{
          "age":{
            "gt":30
          }
        }
        }
      ]
    }
  }
}
#查询名字中不含张并且年龄不大于30
#查询名字中不含张并且年龄不大于30
GET /users/_doc/_search
{
  "query":{
    "bool":{
      "must_not":[
        {
          "term":{
            "name": "张"
          }
        },
        {
           "range":{
          "age":{
            "gt":30
          }
        }
        }
      ]
    }
  }
}

可以做更复杂的嵌套

查询姓名含张或者年龄大于30或者(姓名含李并且年龄大于20)
#查询姓名含张或者年龄大于30或者(姓名含李并且年龄大于20)
GET /users/_doc/_search
{
  "query":{
    "bool":{
      "should":[
        {
          "term":{
            "name": "张"
          }
        },
        {
          "range":{
          "age":{
            "gt":30
          }
        }
        },
        {
          "bool":{
            "must":[
              {
                "term":{
                  "name":"李"
                }
              },
              {
                "range":{
                  "age":{
                    "gt": 20
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}
高亮(highlight):注意并不会修改原数据,而是会在搜索结果中新加一个属性

在这里插入图片描述

GET /users/_doc/_search
{
  "query":{
    "term":{
      "address": {
        "value": "南"
      }
    }
  },
  "highlight":{
    "fields":{
      #指定字段,因为不同字段可能会有相同的查询词
      "*":{} #*表示所有
      #"address":{}
    }
  }
}
GET /users/_doc/_search
{
  "query":{
    "term":{
      "address": {
        "value": "南"
      }
    }
  },
  "highlight":{
    "fields":{
      "*":{}
      #"address":{}
    },
    #自定义高亮标签
    "pre_tags": ["<span style='color: red'>"],
    "post_tags": ["</span>"]
    
  }
}
多字段查询(multi_match)
#name是text类型(可以分词),"小10"会被分词后与name字段查询
#id是keyword不能分词,"小10"就做为keyword与id字段查询
GET /users/_doc/_search
{
  "query":{
    "multi_match":{
      "query": "小10",
      "fields": ["name","id"]
    }
  }
}
多字段分词查询(query_string):可以指定分词器
GET /users/_doc/_search
{
  "query":{
    "query_string":{
      "query": "小10",
      #默认查询字段
      "default_field": "name"
      #指定查询字段
      #"fields": ["name","id"]
      #指定分词
      #"analyzer": "ik_max_word"
    }
  }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值