Curl 命令

  1. # 建立索引
  2. [root@dbtest01 ~]# curl -XPUT 'http://10.0.0.121:9200/test'
  3. # 插入数据
  4. [root@dbtest01 ~]# curl -XPUT 'localhost:9200/student/user/1?pretty' -H 'Content-Type: application/json' -d '{"name": "wqh","gender":"male","age":"18","about":"I will carry you","interests":["cs","it"]}'

ES-Head 插件

谷歌浏览器安装 ES-Head 插件,点击下载

将解压后的文件夹拖入谷歌浏览器扩展程序界面即可

部署 Kibana

安装 Kibana

  1. # 上传代码包
  2. [root@dbtest01 ~]# rz kibana-6.6.0-x86_64.rpm
  3. # 安装
  4. [root@dbtest01 ~]# rpm -ivh kibana-6.6.0-x86_64.rpm

配置 Kibana

  1. [root@dbtest01 ~]# vim /etc/kibana/kibana.yml
  2. [root@dbtest01 ~]# grep "^[a-Z]" /etc/kibana/kibana.yml
  3. # 进程的端口
  4. server.port: 5601
  5. # 监听地址
  6. server.host: "10.0.0.121"
  7. # 指定 ES 地址
  8. elasticsearch.hosts: ["http://127.0.0.1:9200"]
  9. # Kibana 也会创建索引
  10. kibana.index: ".kibana"

启动 Kibana

  1. # 启动 Kibana
  2. [root@dbtest01 ~]# systemctl start kibana.service
  3. # 验证
  4. [root@dbtest01 ~]# netstat -lntp
  5. tcp 0 0 10.0.0.121:5601 0.0.0.0:* LISTEN 88636/node

浏览器访问页面

  1. # 访问 http://10.0.0.121:5601 , Kibana 启动速度较慢

ElasticSearch 数据操作

创建索引

  1. # 语法:
  2. PUT /<index>
  3. # 示例:
  4. PUT /laowang
  5. PUT xiaowang

创建数据

ES 存储数据三个必要构成条件,每一条数据必须有以下的数据结构,

构成条件 说明
_index 索引(数据存储的地方)
_type 类型(数据对应的类)
_id 数据唯一标识符
  1. # 语法
  2. PUT /<index>/_doc/<_id>
  3. POST /<index>/_doc/
  4. PUT /<index>/_create/<_id>
  5. POST /<index>/_create/<_id>
  6. index:索引名称,如果索引不存在,会自动创建
  7. _doc:类型
  8. <_id>:唯一识别符,创建一个数据时,可以自定义ID,也可以让他自动生成

指定 ID 插入数据(PUT)

  1. PUT /student/user/3
  2. {
  3. "name": "zzz",
  4. "gender": "male",
  5. "age": "23",
  6. "about": "abcdefg",
  7. "interests": [
  8. "sturdy",
  9. "dddddd"
  10. ]
  11. }
  12. # 一般不用此方式插入数据
  13. # —— 需要修改 ID 值
  14. # —— 当指定 ID 时,插入数据时会查询数据对比 ID 值,若 ID 相同,则会覆盖更新原来的数据

随机 ID 插入数据(POST)

  1. # ES 会随机生成一个较长字符串作为此条数据的唯一 ID 标识
  2. POST /student/user/
  3. {
  4. "name":"xiaoliu",
  5. "gender":"female"
  6. }

添加指定字段

  1. # 推荐使用方法
  2. POST /student/user/
  3. {
  4. "id":"1",
  5. "name":"xiaoliu",
  6. "gender":"female"
  7. }

查询数据

简单查询

  1. # 查看所有索引信息
  2. GET /_all
  3. GET _all
  4. # 查看所有索引的数据
  5. GET /_all/_search
  6. # 查看指定索引信息
  7. GET /student
  8. # 查看指定索引的数据
  9. GET /student/_search
  10. # 查看指定数据
  11. GET /student/user/1

条件查询(Term,Match)

①. — term 代表完全匹配,也就是精确查询,搜索前不会再对搜索词进行分词,例如,我们要搜索标题(title)为 "北京烤鸭" 的所有文档:

  1. # 方法一:
  2. GET /news/_search
  3. {
  4. "query": {
  5. "term": {
  6. "title": {
  7. "value": "北京烤鸭"
  8. }
  9. }
  10. }
  11. }
  1. # 可以省略 value 行,与 Key 合并到一行
  2. GET /news/_search
  3. {
  4. "query": {
  5. "term": { <-------- 使用 term 匹配,适用于精确查找
  6. "title":"北京烤鸭" <------- 简写,并为一行
  7. }
  8. }
  9. }

②. — match 代表模糊匹配,先对搜索词进行分词,例如,我们要搜索标题(title)为 "北京烤鸭" 的文档时,会先将 "北京烤鸭" 分词为 "北京" 和 "烤鸭",符合两者其一的,都会取到结果:

  1. # 方法二:
  2. GET /news/_search
  3. {
  4. "query": {
  5. "match": { <-------- 使用 match 匹配,适用于模糊查找
  6. "title": "北京烤鸭"
  7. }
  8. }
  9. }

多条件查询(Bool)

Bool 查询现在包括四种子句:must,filter,should,must_not

①. — must 查询:查询条件必须全部满足,类似 SELECT 语句中 的 AND:

  1. # 查询条件必须全部满足
  2. GET /student/_search
  3. {
  4. "query": {
  5. "bool": {
  6. "must": [
  7. {
  8. "term": {
  9. "age": {
  10. "value": "23"
  11. }
  12. }
  13. },
  14. {
  15. "term": {
  16. "name": {
  17. "value": "wqh"
  18. }
  19. }
  20. }
  21. ]
  22. }
  23. }
  24. }

②. — filter 查询:查询条件必须全部满足,类似 SELECT 语句中的 AND,与 must 不同的是,不会计算相关性分数:

  1. # 跟 must 一样,在数据量很大时,比 must 查询快一点,因为不用计算相关分
  2. GET /student/_search
  3. {
  4. "query": {
  5. "bool": {
  6. "filter": [
  7. {
  8. "term": {
  9. "age": {
  10. "value": "23"
  11. }
  12. }
  13. },
  14. {
  15. "term": {
  16. "name": {
  17. "value": "wqh"
  18. }
  19. }
  20. }
  21. ]
  22. }
  23. }
  24. }

③. — should 查询:查询条件满足其一即可,类似 SELECT 语句中的 OR,会计算相关性分数:

  1. # 多条件查询时,查询条件只要有一个满足就可以
  2. GET /student/_search
  3. {
  4. "query": {
  5. "bool": {
  6. "should": [
  7. {
  8. "term": {
  9. "age": {
  10. "value": "23"
  11. }
  12. }
  13. },
  14. {
  15. "term": {
  16. "name": {
  17. "value": "wqh"
  18. }
  19. }
  20. }
  21. ]
  22. }
  23. }
  24. }

④. — must_not 查询:查询条件必须不满足,类似 SELECT 语句中的 NOT,会计算相关性分数 :

  1. # must_not 中的条件,必须全部不满足
  2. GET /student/_search
  3. {
  4. "query": {
  5. "bool": {
  6. "must_not": [
  7. {
  8. "term": {
  9. "age": {
  10. "value": "23"
  11. }
  12. }
  13. },
  14. {
  15. "term": {
  16. "name": {
  17. "value": "wqh"
  18. }
  19. }
  20. }
  21. ]
  22. }
  23. }
  24. }

⑤. — must + should 查询:

  1. # 查询年龄是 23岁 或者年龄是 18岁 并且名字是 wqh 的数据
  2. GET /student/_search
  3. {
  4. "query": {
  5. "bool": {
  6. "should": [
  7. {
  8. "term": {
  9. "age": {
  10. "value": "23"
  11. }
  12. }
  13. },
  14. {
  15. "bool": {
  16. "must": [
  17. {
  18. "term": {
  19. "age": {
  20. "value": "18"
  21. }
  22. }
  23. },
  24. {
  25. "term": {
  26. "name": {
  27. "value": "xiaozi"
  28. }
  29. }
  30. }
  31. ]
  32. }
  33. }
  34. ]
  35. }
  36. }
  37. }

⑥. — 范围查询:

  1. GET /student/_search
  2. {
  3. "query": {
  4. "bool": {
  5. "must": [
  6. {
  7. "range": {
  8. "age": {
  9. "gte": 20,
  10. "lte": 25
  11. }
  12. }
  13. }
  14. ]
  15. }
  16. }
  17. }

修改数据

  1. # 修改数据时指定 ID 修改
  2. PUT /student/user/1
  3. {
  4. "name":"雾山火行",
  5. "gender":"male",
  6. "age":"18"
  7. }
  8. # 注意,修改数据时,除了要修改的值,其他字段的值也要带上,否则原有的其他字段会丢失
  9. PUT /student/user/2
  10. {
  11. "name":"wqh",
  12. "gender":"male",
  13. "age":"19"
  14. }

删除数据

  1. # 删除指定 ID 数据
  2. DELETE /student/user/4
  3. # 删除索引(别瞎删,可以用 ES-head 关闭索引)
  4. DELETE /student

Query Context(不带 Filter) 与 Filter Context

①. — Query Context 即指所有不使用 Bool 查询中的 Filter(过滤器)的上下文查询

②. — Filter Context 指 Bool 查询中,使用 Filter(过滤器)的上下文查询

查询在 Query 查询上下文和 Filter 过滤器上下文中,执行的操作是不一样的:

①. — 查询上下文:是在使用 query 进行查询时的执行环境,比如使用 search 的时候。

在查询上下文中,查询会回答这个问题——“这个文档是否匹配,它的相关度高么?

ES中索引的数据都会存储一个 _score 分值,分值越高就代表越匹配。即使 lucene 使用倒排索引,对于某个搜索的分值计算还是需要一定的时间消耗 。

②. — 过滤器上下文:在使用 filter 参数时候的执行环境,比如在 bool 查询中使用 Must_not 或者 filter

在过滤器上下文中,查询会回答这个问题——“这个文档是否匹配?

它不会去计算任何分值,也不会关心返回的排序问题,因此效率会高一点。

另外,经常使用过滤器,ES会自动的缓存过滤器的内容,这对于查询来说,会提高很多性能。

总而言之:

①. — 查询上下文:查询操作不仅仅会进行查询,还会计算分值,用于确定相关度;

②. — 过滤器上下文:查询操作仅判断是否满足查询条件,不会计算得分,查询的结果可以被缓存,所以速度快

所以,根据实际的需求是否需要获取得分,考虑性能因素,选择不同的查询子句;如果不需要获得查询词条的相关性分数,尽量使用 Filter 。

参考:

Bool 查询

Query 与 Filter 的区别

ElasticSearch 交互使用的更多相关文章

  1. 使用spark与ElasticSearch交互

    使用 elasticsearch-hadoop 包,可在 github 中搜索到该项目 项目地址 example import org.elasticsearch.spark._ import org ...

  2. PHP如何与搜索引擎Elasticsearch交互?

    一:参考官方文档 1. Elasticsearch 5.4.0英文手册:https://www.elastic.co/guide/en/elasticsearch/reference/5.4/sear ...

  3. 与Elasticsearch交互的客户端

    1.访问ES的方式 访问es的方式有两种,一种是http方式,还有一种是java客户端方式. 其中Java客户端又分为:1.1.Node client: 节点客户端实际上是一个集群中的节点(但不保存数 ...

  4. Elasticsearch安装和使用

    Elasticsearch安装和使用 Elasticsearch 是开源搜索平台的新成员,实时数据分析的神器,发展迅猛,基于 Lucene.RESTful.分布式.面向云计算设计.实时搜索.全文搜索. ...

  5. elasticsearch集群搭建实例

    elasticsearch集群搭建实例 下个月又开始搞搜索了,几个月没动这块还好没有落下. 晚上在自己虚拟机上搭建了一个简易搜索集群,分享一下. 操作系统环境: Red Hat 4.8.2-16 el ...

  6. Elasticsearch教程-从入门到精通(转载)

    转载,原文地址:http://mageedu.blog.51cto.com/4265610/1714522?utm_source=tuicool&utm_medium=referral 各位运 ...

  7. Elasticsearch简介与实战

    什么是Elasticsearch?   Elasticsearch是一个开源的分布式.RESTful 风格的搜索和数据分析引擎,它的底层是开源库Apache Lucene.   Lucene 可以说是 ...

  8. Elasticsearch入门教程之安装与基本使用

    ubuntu16.04+elasticsearch6.5为例,参考官网文档https://www.elastic.co/guide/en/elasticsearch/reference/current ...

  9. Elasticsearch通关教程(一): 基础入门

    简介 Elasticsearch是一个高度可扩展的.开源的.基于 Lucene 的全文搜索和分析引擎.它允许您快速,近实时地存储,搜索和分析大量数据,并支持多租户. Elasticsearch也使用J ...

随机推荐

  1. 【Oracle】delete表后commit后怎么找回,方法

    有些时候,不小心删除了一些需要的表,而且数据库不能停止,只能一直运行下去,这样的话很麻烦 下面介绍的方法就是删除表后通过时间戳后者scn找回删除的数据 模拟实验环境: 创建一个新表 SQL> c ...

  2. 【EXP】exp-00091解决办法

    如果遇到exp的话一般都是因为字符集的问题 解决办法: 1.在oracle中查看数据库的字符集 SQL> select userenv('language') from dual; USEREN ...

  3. 【ORACLE】awr报告问题分析

    本文转自:http://www.linuxidc.com/Linux/2015-10/123959.htm 感谢分享 1.问题说明 运维人员都有"节日休假恐怖症",越到节日.休假和 ...

  4. LOOP语句的AT语句块

    在loop一个内表的时候,如果想在loop循环中使用AT NEW ,AT END OF 等语句,一定需要注意的几点: 1.内表要排序 2.AT END OF 语句中影响的是指定字段前面所有的字段 3. ...

  5. 词嵌入之FastText

    什么是FastText FastText是Facebook于2016年开源的一个词向量计算和文本分类工具,它提出了子词嵌入的方法,试图在词嵌入向量中引入构词信息.一般情况下,使用fastText进行文 ...

  6. IOC技术在前端项目中的应用

    目录 背景 什么是IOC 如何实现一个IOC 第一步:实现一个容器 第二步:用好装饰器 第三步:使用容器 扩展和展望 最后 背景 前端发展至今已经过去30余年,前端应用领域在不断壮大的过程中,也变得越 ...

  7. Matlab GUI学习总结

    从简单的例子说起吧.   创建Matlab GUI界面通常有两种方式:   1,使用 .m 文件直接动态添加控件     2.  使用 GUIDE 快速的生成GUI界面显然第二种可视化编辑方法算更适合 ...

  8. 转 2 jmeter常用功能介绍-测试计划、线程组

    2 jmeter常用功能介绍-测试计划.线程组   1.测试计划测试用来描述一个性能测试,所有内容都是基于这个测试计划的. (1)User Defined Variables:设置用户全局变量.一般添 ...

  9. Linux安装redis报错:jemalloc/jemalloc.h: No such file or directory踩坑

    报错内容: 针对这个错误,我们可以在README.md 文件中看到解释: --------- Selecting a non-default memory allocator when buildin ...

  10. vue-cli快速创建项目,交互式

    vue脚手架用于快速构建vue项目基本架构 下面开始安装vue-cli npm install -g @vue/cli # OR yarn global add @vue/cli以上两句命令都可以安装 ...