Es使用kibana增删改查以及复杂查询

摘要:
POST/esstudy/user/3/__更新{“doc”:{“name”:“Wang Wu Upgrade”,“age”:23}}1.3删除Delete/xxx1.4以获取get/xxx5?查询名为张三、年龄为21岁的GETEStudy/用户/_搜索{“查询”:{“bool”:}“must”:〔{“match”:{“name”:“张三”}},{“match”:{“age”:21}}}〕}2.应该只满足一个条件/_搜索{“查询“:{”bool“:{“should”:〔}“mat”匹配“:}name”:”张三“},{“match:{”age“:22}]}}}}}3。大多数情况下,not查询不满足条件,即,搜索{“query”:{“bool”:}“must_not”:〔{”match“:{”name“:”Zhang San“},{”匹配“:{”age“:22}〕}}4。filtergt意味着大于gte意味着大于或等于lt意味着小于lte意味着小于或等于GEesstudy/user/搜索{”query“:}”bool“:”most“:”〔{“match”:“:”name““:”张三“}}}】},“filter”:{”range“:”。

1.简单操作

1.1 增加

先插入四条数据

PUT /esstudy/user/1
{
  "name": "张三",
  "age": 21
}
PUT /esstudy/user/2
{
  "name": "李四",
  "age": 22
}
PUT /esstudy/user/3
{
  "name": "王五",
  "age": 23
}
PUT /esstudy/user/4
{
  "name": "赵六",
  "age": 24
}

看一下数据:

Es使用kibana增删改查以及复杂查询第1张

如果说数据存在那么便是覆盖(全量覆盖)

PUT /esstudy/user/1
{
  "name": "法外狂徒张三",
  "age": 21,
  "desc": "法律大牛"
}

再执行

GET /esstudy/user/1

Es使用kibana增删改查以及复杂查询第2张

PUT /esstudy/user/2
{
  "name": "李四"
}

Es使用kibana增删改查以及复杂查询第3张

已经修改了 那么 PUT 可以更新数据但是。麻烦的是 原数据你还要重写一遍要 这不符合我们规矩。

 1.2 更新

使用 POST 命令,在 id 后面跟 _update ,要修改的内容放到 doc 文档(属性)中即可。
POST /esstudy/user/3/_update
{
  "doc":{
    "name": "王五升级",
    "age": 23
  }
}

Es使用kibana增删改查以及复杂查询第4张

1.3 删除

DELETE /xxx

1.4 获取

GET /xxx

5.查询

GET esstudy/user/_search?q=name:赵六
通过 _serarch?q=name:狂神说 查询条件是name属性有赵六的那些数据。
Es使用kibana增删改查以及复杂查询第5张
我们看一下结果 返回并不是 数据本身,是给我们了一个 hits ,还有 _score得分,就是根据算法算出和
查询条件匹配度高得分就搞。

2.复杂查询

2.1 查询所有

GET esstudy/user/_search
{
  "query": {
    "match_all": {}
  }

}

2.2 构建查询 

再插入一条数据

PUT /esstudy/user/5
{
  "name": "张三",
  "age": 21
}

再进行查询

GET esstudy/user/_search
{
  "query": {
    "match": {
      "name": "法外狂徒张三"
    }
  }
}

Es使用kibana增删改查以及复杂查询第6张

 通过分数来查看谁更加符合结果

2.3限制属性

通过 _source 来控制,比如说只需要名字的属性
GET esstudy/user/_search
{
  "query": {
    "match": {
      "name": "张三"
    }
  },
  "_source": ["name"]
}

Es使用kibana增删改查以及复杂查询第7张

 2.4 排序

根据年龄倒序

GET esstudy/user/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}

Es使用kibana增删改查以及复杂查询第8张

2.5 分页

GET esstudy/user/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ], 
  "from": 0,
  "size": 2
}

Es使用kibana增删改查以及复杂查询第9张

Es使用kibana增删改查以及复杂查询第10张

 2.6 布尔查询

1. must

都要符合

例如。查询名字是张三,年龄是21的

GET esstudy/user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "张三"
          }
        },
        {
          "match": {
            "age": 21
          }
        }
      ]
    }
  }
  
}

Es使用kibana增删改查以及复杂查询第11张

 2. should

只要满足一个即可

GET esstudy/user/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "name": "张三"
          }
        },
        {
          "match": {
            "age": 22
          }
        }
      ]
    }
  }
  
}

Es使用kibana增删改查以及复杂查询第12张

3. must_not

查询不满足条件的,即过滤操作

GET esstudy/user/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "name": "张三"
          }
        },
        {
          "match": {
            "age": 22
          }
        }
      ]
    }
  }
  
}

Es使用kibana增删改查以及复杂查询第13张

 4. filter

gt 表示大于
gte 表示大于等于
lt 表示小于
lte 表示小于等于 
GET esstudy/user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "张三"
          }
        }
      ],
      "filter": {
        "range": {
          "age": {
            "gte": 20,
            "lte": 40
          }
        }
      }
    }
  }
  
}

2.7 term精确查询

关于分词:

term 查询是直接通过倒排索引指定的词条,也就是精确查找。
term和match的区别:
  • match是经过分析(analyer)的,也就是说,文档是先被分析器处理了,根据不同的分析器,分析出的结果也会不同,在会根据分词 结果进行匹配
  • term是不经过分词的,直接去倒排索引查找精确的值。
注意 ⚠ :我们现在 用的es7版本 所以我们用 mappings properties 去给多个字段(fifields)指定类型的时
候,不能给我们的索引制定类型:

 创建规则

PUT testdb
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "desc": {
        "type": "keyword"
      }
    }
  }
}

Es使用kibana增删改查以及复杂查询第14张

 插入数据:

PUT testdb/_doc/1
{
  "name": "法外狂徒1号",
  "desc": "法外狂徒1号decs"
}
PUT testdb/_doc/2
{
  "name": "法外狂徒2号",
  "desc": "法外狂徒2号decs"
}

Es使用kibana增删改查以及复杂查询第15张

总结:keyword 字段类型不会被分析器分析! 
然后使用term查询
GET testdb/_search
{
  "query": {
    "term": {
      "desc": "法外狂徒2号decs"
    }
  }
}

可以看到结果只有一个

Es使用kibana增删改查以及复杂查询第16张

 如果只查询法外狂徒那么一个都没有

GET testdb/_search
{
  "query": {
    "term": {
      "desc": "法外狂徒"
    }
  }
}

Es使用kibana增删改查以及复杂查询第17张

精确查询多个值:

GET esstudy/user/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "age": "22"
          }
        },
        {
          "term": {
            "age": 21
          }
        }
      ]
    }
  }
  
}

2.8 高亮显示

GET esstudy/user/_search
{
"query": {
"match": {
"name": "张三"
}
},
"highlight": {
"fields": {
"name": {}
}
}

}

Es使用kibana增删改查以及复杂查询第18张

 可以看到加上了em标签,当然我们也可以自定义。

GET esstudy/user/_search
{
  "query": {
    "match": {
      "name": "张三"
    }
  },
  "highlight": {
    "pre_tags": "<p   style='color:red'>", 
    "post_tags": "</p>", 
    "fields": {
      "name": {}
    }
  }
  
}

Es使用kibana增删改查以及复杂查询第19张

免责声明:文章转载自《Es使用kibana增删改查以及复杂查询》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ElasticStack分布式引擎技术栈(ELK)介绍Zynq的PS端的SPI下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Elastic search 基本使用

1. elasticsearch 命令的基本格式 RESTful接口URL的格式: http://localhost:9200/<index>/<type>/[<id>] 其中index、type是必须提供的。id是可选的,不提供es会自动生成。index、type将信息进行分层,利于管理。index可以理解为数据库;t...

编译内核启用iptables及netfilter

在Network Packet Filtering Framework(Netfilter)一节中还有两个额外的配置节——Core Netfilter Configuration(核心Netfilter配置)和IP:Netfilter Configuration(IP:Netfilter配置)。 1. 核心Netfilter配置 核心Netfilter配置...

ES基本查询总结

ES与数据库比较 查询操作 Elasticsearch中当我们设置Mapping(分词器、字段类型)完毕后,就可以按照设定的方式导入数据。 有了数据后,我们就需要对数据进行检索操作。根据实际开发需要,往往我们需要支持包含但不限于以下类型的检索:1)精确匹配,类似mysql中的 “=”操作;2)模糊匹配,类似mysql中的”like %关键词% “查询操...

boost正则库匹配ASII编码的中文、全角字符示例

首先,boost正则库(regex)不支持形如 [0-9] 这样的表达式,貌似会崩溃。    现在查网上正则匹配中文的例子,都是讲用 \uFF00-\uFFFF ; 拜托,\u是unicode编码,能用于我常用的ansii编码(如GB18030,GBK,GB2312等等)吗?举例时也不说清楚。    再次查看正则语法,发现 \xnn 比较有用,\x匹配AS...

Debian 7 Wheezy 配置: 中文字体美化

参考的是这篇文章 http://blog.csdn.net/qq280948982/article/details/6782603 首先通过sudo apt-get install 直接安装 ttf-wqy-zenhei. 另外我还安装了 xfonts-wqy.这两个字体安装完后, 不需要额外设置, Chrome的中文字体方块乱码问题就自动修复了, Ice...

android自定义控件概述

引子:   android SDK中会提供一些基础的控件以供开发。但是大多数情况下,这些基础的控件无法满足业务需求。本文主要说明自定义控件的分类,以及提供示例代码。   本文只做入门级选手阅读,或者 加深印象 或 温故而知新,大佬大神敬请绕道。 android控件的3种方式: 1)派生控件 : 从SDK已有的控件为基础,改变其部分特征,形成符合需求的自定...