ES 简介

ES是一个使用java语言编写的并且基于Lucene编写的搜索引擎, 他提供了分布式的全文搜索服务, 还提供了一个RESTful风格的web接口, 官方还对多种语言提供了相应的API

Lucene?

Lucene 本身就是一个搜索引擎的底层,

ES特点

分布式: ES主要为了横向扩展能力

全文检索: 将一段词语进行分词, 并且将分出的单个词语统一的放入一个分词库中,在搜索时,根据关键字去分词库中搜索去找到想找到的内容,(倒排索引)

RESTful风格web接口: 操作ES非常简单, 只需要发送一个Http请求并且根据请求方式不同和携带参数不同,执行相应的功能,

倒排索引

待补充

安装ES&kibana

version: "3.1"
services:elasticsearch:image: daocloud.io/library/elasticsearch:6.5.4restart: alwayscontainer_name: elasticsearchenvironment:- "cluster.name=elasticsearch" #设置集群名称为elasticsearch- "discovery.type=single-node" #以单一节点模式启动- "ES_JAVA_OPTS=-Xms4096m -Xmx4096m" #设置使用jvm内存大小ports:- 9200:9200kibana:image: daocloud.io/library/kibana:6.5.4restart: alwayscontainer_name: kibaneports:- 5601:5601depends_on:- elasticsearch #kibana在elasticsearch启动之后再启动environment:- "elasticsearch.hosts=http://127.0.0.1:9200" #设置访问elasticsearch的地址

IK 分词器

安装

下载地址: https://github.com/medcl/elasticsearch-analysis-ik/releases?after=v6.7.2

下载需要与ES版本一直否则无法启动ES,

在 elasticsearch/plugins 下新建IK文件夹, 解压 后 重启ES即可

IK 介绍

如果使用中文建议使用IK,他有两种分词模式 ik_mart(最少切分)与 ik_max_word(最细粒度划分)

ik_mart 使用介绍

ik_max_word使用介绍

但是使用IK_MAX_WORD有一个问题, 他是根据他认识的进行分词, 比如我们想把胡雪阔当连起来他是不可以的

这个时候就需要自己加到字典中,

IK 分词器加入自定义词语

首先在elasticsearch/plugins/ik/config文件夹下面创建自己的字典my.dic后加入huxuekuo一行文字

然后编辑IKAnalyzer.cfg.xml配置文件,修改<entry key="ext_dict">my.dic</entry>

然后重启ES看效果 !!

Restful请求详解

通过Http请求进行操作

Method URL remarks
PUT 127.0.0.1:9200/索引名称/类型名称/文档ID 添加文档(自动创建索引)
POST 127.0.0.1:9200/索引名称/类型名称 创建文档(随机索引ID)
POST 127.0.0.1:9200/索引名称/类型名称/文档ID/_update 修改文档
DELETE 127.0.0.1:9200/索引名称/类型名称/文档ID 删除文档
GET 127.0.0.1:9200/索引名称/类型名称/文档ID 根据文档ID获取文档
POST 127.0.0.1:9200/索引名称/类型名称/_search 查询索引下所有文档

PUT 语法

创建文档案例

PUT /test1/type1/1
{"name":"huxuekuo","age" : 12
}返回 结果:{"_index" : "test1","_type" : "type1","_id" : "1","_version" : 1,"result" : "created","_shards" : {"total" : 2,"successful" : 1,"failed" : 0},"_seq_no" : 0,"_primary_term" : 1
}

有一个问题是, 当前数据的类型是ES自动识别的,

PUT /test1/type1/1 语句中的type1 可以没有默认为_doc, PUT /test1/__doc/1 或者doc也不用加

创建索引(指定属性的数据类型)

### ES7 语法
PUT /test2
{"mappings":{"properties":{"name":{"type":"text"},"age":{"type":"long"}}}
}### ES6 语法
PUT /test3
{"mappings":{"product":{"properties":{"name": {"type": "text"},"age": {"type": "long"}} }}
}返回结果
{"acknowledged" : true,"shards_acknowledged" : true,"index" : "test3"
}

GET语法

获取索引信息

GET /test3返回数据
{"test3" : {"aliases" : { },"mappings" : {"product" : {"properties" : {"age" : {"type" : "long"},"name" : {"type" : "text"}}}},"settings" : {"index" : {"creation_date" : "1604564111952","number_of_shards" : "5","number_of_replicas" : "1","uuid" : "UHXqcMJnSWKQE4The-_mcQ","version" : {"created" : "6050499"},"provided_name" : "test3"}}}
}

获取文档信息

GET /test1/type1/1{"_index" : "test1","_type" : "type1","_id" : "1","_version" : 1,"found" : true,"_source" : {"name" : "huxuekuo","age" : 12}
}

简单条件查询

GET /test1/type1/_search?q=name:1### 返回结果{"_index" : "test1","_type" : "type1","_id" : "1","_score" : 0.2876821,"_source" : {"name" : "1","age" : "1"}}

注意在简单查询中返回了"_score" : 0.2876821, 这是什么? 如果存在多条数据,匹配度越高则分数越高

POST 语法

post可以用作修改文档, put 也可以修改文档, 我们先看一下put 修改文档的方式

PUT /test1/type1/1
{"name":"huxuekuo1","age" : 12
}

当文档ID已经创建, 一下语句就是修改语句, 有一个问题是, 如果修改时丢字段了

丢字段以后的文档数据:

{"_index" : "test1","_type" : "type1","_id" : "1","_version" : 2,"found" : true,"_source" : {"name" : "huxuekuo1"}
}

_version 发生改变, name值确实改了,但是丢失的age字段也没有了

看一下正常的修改方式

POST /test1/type1/1/_update
{"doc":{"name":"1"}
}

这样就算没有age字段他就不会更新age字段

当前的age类型为long类型, 我们尝试看看修改为text是否可以成功

POST /test1/type1/1/_update
{"doc":{"age":"1爱我的"}
}### 返回结果{"type": "mapper_parsing_exception","reason": "failed to parse field [age] of type [long]"}

一旦数据类型确认下来将不可以通过修改数据的方式去修改

DELETE语法

删除索引

DELETE test1

删除文档

DELETE /test1/type1/1

复杂查询

精准查询

GET /vms/product/_search
{"query": {"match": {"title": "iphone11"}}
}### 返回结果{"took" : 16,"timed_out" : false,"_shards" : {"total" : 5,"successful" : 5,"skipped" : 0,"failed" : 0},"hits" : {"total" : 1,"max_score" : 0.2876821,"hits" : [{"_index" : "vms","_type" : "product","_id" : "3","_score" : 0.2876821,"_source" : {"title" : "iphone11","date" : "2020-11-04","remarks" : "苹果手机无敌啊"}}]}
}

略部分字段显示(_source)

GET /vms/product/_search
{"query": {"match_phrase_prefix": {"title": "iphone"}}, "_source": ["title","date"]
}### 返回结果
{"_index" : "vms","_type" : "product","_id" : "4","_score" : 0.6931472,"_source" : {"date" : "2018-11-04","title" : "iphonex"}},

_source 标记了只显示 title - date 在返回结果中就只有这两样

排序(sort)

简单排序

GET /vms/product/_search
{"query": {"match_phrase_prefix": {"title": "iphone"}},"sort": [{"date": {"order": "asc"}}]
}### 返回结果{"took" : 12,"timed_out" : false,"_shards" : {"total" : 5,"successful" : 5,"skipped" : 0,"failed" : 0},"hits" : {"total" : 3,"max_score" : null,"hits" : [{"_index" : "vms","_type" : "product","_id" : "4","_score" : null,"_source" : {"date" : "2018-11-04","title" : "iphonex"},"sort" : [1541289600000]},{"_index" : "vms","_type" : "product","_id" : "1","_score" : null,"_source" : {"date" : "2020-11-04","title" : "iphone12"},"sort" : [1604448000000]},{"_index" : "vms","_type" : "product","_id" : "3","_score" : null,"_source" : {"date" : "2020-11-04","title" : "iphone11"},"sort" : [1604448000000]}]}
}

asc : 升序

desc: 降序

在使用sort 以后 _score就没有了为null

分页查询

GET /vms/product/_search
{"query": {"match_phrase_prefix": {"title": "iphone"}},"sort": [{"date": {"order": "asc"}}],"from": 0,"size": 1
}

关键词from(从第几个开始)size(返回多少条数据), 数据的下标还是从0开始的

布尔值查询

must (并且)

GET /vms_test/_doc/_search
{"query":{"bool":{"must":[{"match":{"name":"胡"}},{"match":{"age":"20"}}]}}
}

获取同时满足两个条件的数据

should (或)

GET /vms_test/_doc/_search
{"query":{"bool":{"should":[{"match":{"name":"胡"}},{"match":{"age":"20"}}]}}
}

must_not(不等于)

GET /vms_test/_doc/_search
{"query":{"bool":{"must_not":[{"match":{"name":"胡"}},{"match":{"age":"20"}}]}}
}

filter(过滤器)

range(范围过滤)

GET vms_test/_doc/_search
{"query":{"bool":{"filter":{"range":{"age":{"gt":10}}}}}
}

gt 大于

lt 小于

gte 大于等于

lte 小于等于

是可以联合使用的

Elasticsearch(ES)简介及基本使用相关推荐

  1. elasticsearch系列一:elasticsearch(ES简介、安装amp;配置、集成Ikanalyzer)

    一.ES简介 1.ES是什么? Elasticsearch 是一个开源的搜索引擎,建立在全文搜索引擎库 Apache Lucene 基础之上 用 Java 编写的,它的内部使用 Lucene 做索引与 ...

  2. ElasticSearch入门简介、安装ES(安装Kibana和IK分词器)使用 Postman连接ES进行测、ESRestAPI(操作索引CRUD操作文档CRUD)、练习

    要理解倒排索引 要能够使用DSL命令操作索引库 要能够使用DSL命令操作文档 要能够使用RestAPI操作索引库.文档 一.ES简介 理解倒排索引的概念和作用 理解es和MySql的区别和使用场景 1 ...

  3. [Elasticsearch] es 6.6 编译报错 SSL peer shut down incorrectly

    1.概述 前提:[Elasticsearch] es 6.6 编译报错 java.net.ConnectException: Operation timed out Mac 编译es 6.8 报错 [ ...

  4. OpenGL ES 简介

    目录 一.前言 1.WebGL 2.OpenCV 3.Direct3D 4.OpenGL 5.OpenGL ES 和 OpenGL 二.OpenGL ES 跨平台 1.OpenGL ES 2.Meta ...

  5. ElasticSearch (ES)学习之路(二)Win10安装ES,可视化界面,Kibanna

    ElasticSearch (ES)学习之路(二)Win10安装ES,可视化界面,Kibanna 我前一段时间学习的时候ES 还是7.6.x 现在看ES 官网已经到了7.8.X了,迭代维护的速度还是挺 ...

  6. 1、OPenGL ES - 简介、iOS中GLKit简单应用

    OPenGL ES -  简介.iOS中GLKit简单应用 一.OPenGL ES 1.简介: OpenGL ES 是以手持和嵌入式为目标的高级的3D图形应用程序编程接口(API),OpenGL ES ...

  7. ElasticSearch es 插件开发

    ElasticSearch es 插件开发 1. 插件分类 API Extension Plugins API扩展插件 通过添加新的API或功能向Elasticsearch添加新功能,通常与搜索或映射 ...

  8. ElasticSearch(ES)

    文章目录 备注.必看 ElasticSearch 和 Solr 介绍,对比 ElasticSearch 7.8. 官网 基本概念 Cluster(集群) 与 Node(节点) Index -索引 索引 ...

  9. Elasticsearch(ES)的下载与安装

    Elasticsearch(ES)的下载与安装 1.安装 Java 在安装 Elasticsearch 之前,我们需要安装并配置好 JDK, 设置好环境变量 $JAVA_HOME. Elasticse ...

最新文章

  1. 基于多篇经典论文综述Attention模型方法(附源码)
  2. java 对变量加锁_Java最全锁剖析:独享锁/共享锁+公平锁/非公平锁+乐观锁/悲观锁...
  3. Linux文件系统上的特殊权限      SUID, SGID, Sticky(粘之位)
  4. LRU缓存算法缓存设计和实现
  5. POJ 1323 Game Prediction#贪心
  6. 史上最真实行业鄙视链
  7. java 设置文本颜色_设置文本中的字体的颜色
  8. VirtualBox创建虚拟电脑、执行Genymotion模拟器报错
  9. Glib2之dbus用法(五)
  10. tolua unity 报错_unity tolua异常处理
  11. cubase计算机音乐,Cubase与Nuendo电脑音乐制作从新手到高手 (200例)
  12. 应届生如何快速提高职业竞争力
  13. URP教务系统自动登录
  14. java之STS使用和相关目录解说、springBoot微服务项目、前后端发送和接收参数的方式、文件图片视频上传
  15. oracle数据库字符集US7ASCII,在java中处理中文问题
  16. 找到多个名为spring_web的片段。这是不合法的相对排序。有关详细信息,请参阅Servlet规范的第8.2.2 2c节。考虑使用绝对排序。
  17. 是什么让区块链游戏变的“好玩”
  18. AdVoice广告录音制作软件如何音乐语音混音穿插制作广告
  19. 科目二 领线30cm 修方向 示意图 LTS
  20. 计算机二级vb考试真题,2016年计算机二级《VB》考试题及答案

热门文章

  1. 开放原子开源基金会秘书长孙文龙:要打造以开发者为本的开源服务平台
  2. 中南大学实用测量数据处理实验
  3. 钢哥的MBA备考心得 - 献给同样努力的你
  4. 攻防世界reverse——open-sourse(C语言)
  5. P2P在NAT和防火墙上的穿透
  6. Android框架之路——聊天Demo实现
  7. CSS3 @font-face实现颜色大小可控的三角效果——张鑫旭
  8. 7- vue django restful framework 打造生鲜超市 -商品类别数据展示(上)
  9. Hashmap源码详解
  10. 侠盗猎车手五手机版下载。_您现在应该使用的5个侠盗猎车手V Mod