关于文档的基本操作(重点)
基本操作回顾
基本操作
1、添加数据
PUT /kuangshen/user/1
{
"name":"狂神说",
"age":23,
"desc":"一顿操作猛如虎",
"tags":["技术宅","温暖","直男"]
}
PUT /kuangshen/user/2
{
"name":"张三",
"age":23,
"desc":"法外狂徒",
"tags":["交友","旅游","渣男"]
}
PUT /kuangshen/user/3
{
"name":"李四",
"age":23,
"desc":"不知道怎么形容",
"tags":["靓女","跳舞","唱歌"]
}
2、获取数据 GET
GET kuangshen/user/1
3、更新命令 PUT
4、 POST __update 推荐使用这种方式
POST kuangshen/user/1/_update
{
"doc":{
"name":"狂神说java"
}
}
//如果没有_update 那么就只有一个name信息 ,如果有,那么就只修改那么信息
5、简单搜索
GET kuangshen/user/1
//简单的条件查询
GET kuangshen/user/_search?q=name:狂神说
复杂操作 搜索
花样查询详解
查询
只想查看name 和 desc
GET kuangshen/user/_search
{
"query":{
"match": {
"name": "狂神"
}
},
"_source":["name","desc"]
}
排序 通过年龄排序
GET kuangshen/user/_search
{
"query":{
"match": {
"name": "狂神"
}
},
"sort":[
{
"age":{
"order":"asc"
}
}
]
}
分页
GET kuangshen/user/_search
{
"query":{
"match": {
"name": "狂神"
}
},
"sort":[
{
"age":{
"order":"asc"
}
}
],
"from":0,
"size":1
}
//from 从什么开始 size 展示多少个数据
布尔值查询 多条件查询
must (and) 所有条件都要符合
GET kuangshen/user/_search
{
"query":{
"bool" :{
"must": [
{
"match": {
"name": "狂神说"
}
},
{
"match": {
"age": 23
}
}
]
}
}
}
should (or) 满足一个就行
GET kuangshen/user/_search
{
"query":{
"bool" :{
"should": [
{
"match": {
"name": "狂神说"
}
},
{
"match": {
"age": 23
}
}
]
}
}
}
must_not (not) 查询不是23岁的人
GET kuangshen/user/_search
{
"query":{
"bool" :{
"must_not": [
{
"match": {
"age": 23
}
}
]
}
}
}
filter过滤 (查询是狂神,但年龄大于1小于30的)
- gt 大于
- lt 小于
- gte 大于等于
- lte 小于等于
GET kuangshen/user/_search
{
"query":{
"bool" :{
"must": [
{
"match": {
"name": "狂神"
}
}
],
"filter": [
{
"range": {
"age": {
"gt": 1,
"lt": 30
}
}
}
]
}
}
}
匹配多个条件! 多个条件空格 隔开
//只要满足其中一个结果就可以被查出 这个时候可以通过分值基本判断
GET kuangshen/user/_search
{
"query":{
"match": {
"tags": "男 技术"
}
}
}
精确查询 !
term查询是直接通过倒排索引指定的词条进程精确的查找的!|
关于分词
- term,直接查询精确的
- match,会使用分词器解析!(先分析文档,然后在通过分析的文档进行查询!)
关于类型 text keyword
测试
PUT testdb
{
"mappings": {
"properties": {
"name":{
"type": "text"
},
"desc":{
"type": "keyword"
}
}
}
}
PUT testdb/_doc/1
{
"name":"狂神说java name",
"desc":"狂神说java desc"
}
PUT testdb/_doc/2
{
"name":"狂神说java name",
"desc":"狂神说java desc2"
}
GET _analyze
{
"analyzer" :"keyword",
"text":"狂神说java name"
}
// 不会拆分 是一个整体
GET _analyze
{
"analyzer" :"standard",
"text":"狂神说java name"
}
//被拆分了
GET testdb/_search
{
"query": {
"term": {
"name": "狂"
}
}
}
// 发现都2条可以查出来
GET testdb/_search
{
"query": {
"term": {
"desc":"狂神说java desc"
}
}
}
//发现只有一条 因为keyword不会被分词器解析
精确查询多个值
PUT testdb/_doc/3
{
"t1":"22",
"t2":"2020-4-6"
}
PUT testdb/_doc/4
{
"t1":"33",
"t2":"2020-4-7"
}
GET testdb/_search
{
"query": {
"bool": {
"should": [
{
"term": {
"t1": "22"
}
},
{
"term": {
"t1": "33"
}
}
]
}
}
}
高亮查询 !
默认是 < em>
//自定义搜索高亮条件
GET kuangshen/user/_search
{
"query":{
"match": {
"name": "狂神"
}
},
"highlight":{
"pre_tags": "<p class='key' style='color:red;'>",
"post_tags": "</p>",
"fields": {
"name": {}
}
}
}