1.什么是ES

**ES** 全称 **ElasticSearch** 是一种分布式全文搜索引擎,基于Lucene(全文搜索框架)开发而来。
Lucene是公认的迄今为止的最好用的搜索引擎库,但是他所提供的API对于我们使用者来说,是非常苦恼的,常要花费大量时间去熟悉学习。ES的出现就很好的解决了这个问题,良好的封装,易用的API,链式书写方式,开瓶即饮。

2.ES特点

**ES** 虽然是以Lucene核心库开发的,但是却不是以它作为核心,**ES** 的贴点体现在:*分布式实时文件存储,每个字段皆能索引* *集群,可扩展(理论上无上限)**高度集成的服务(RESTful风格的API,各语言客户端)**易学易用,开瓶即饮*

3.ES安装

3.1下载

[ES官方下载地址:](https://www.elastic.co/downloads/elasticsearch)
ES安装环境只依赖JDK,以5.2.2版本为例,下载对应的文件即可

3.2安装

将压缩包解压,然后在解压后的目录下找到*bin*文件夹,点击名为**elasticsearch.bat** 文件运行。
测试是否安装成功:访问:http://localhost:9200/
![安装成功:](https://img-blog.csdnimg.cn/2018110517350745.png)**注意**:如果本机内存过小,或者磁盘空间不足会启动失败,手动修改*config*文件夹下**jvm.options**文件中的参数。打开**jvm.options**文件,搜索-Xms,得到结果如下:
################################################################
## IMPORTANT: JVM heap size
################################################################
##
## You should always set the min and max JVM heap
## size to the same value. For example, to set
## the heap to 4 GB, set:
##
## -Xms4g
## -Xmx4g
##
## See https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html
## for more information
##
################################################################# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
#  '#'代表的是注释, -Xms 最小占用内存 -Xm最大占用内存 如果修改,默认启动时为2gb 这里可以修改一下
-Xms200m
-Xmx200m

辅助管理工具Kibana5

这里介绍一款辅助学习工具,避免了使用cmd的尴尬场景
[Kibana5.2.2下载地址:](https://www.elastic.co/downloads/kibana)
  1. 解压并编辑config/kibana.yml,设置elasticsearch.url 的值为已启动的ES
  2. 启动Kibana5 : bin\kibana.bat
  3. 默认访问地址:http://localhost:5601
  4. 菜单:
    Discover:可视化查询分析器
    Visualize:统计分析图表
    Dashboard:自定义主面板(添加图表)
    Timelion:Timelion是一个kibana时间序列展示组件(暂时不用)
    Dev Tools :Console(同CURL/POSTER,操作ES代码工具,代码提示,很方便)
    Management:管理索引库(index)、已保存的搜索和可视化结果(save objects)、设置 kibana 服务器属性

ES使用

ES数据管理

ES文档
ES是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在ES中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。
ES使用Javascript对象符号(JavaScript Object Notation),也就是JSON,作为文档序列化格式。JSON现在已经被大多语言所支持,而且已经成为NoSQL领域的标准格式。
ES存储的一个员工文档的格式示例:
 {_index : “crm”,_type : “user”,就_id : 1, _source : {"email": "nxh@itsource.cn","name": "倪先华","info": {"addr": "四川省成都市","age": 30,"interests": [ "美食", "美女" ]},"join_date": "2016-06-01"}}
尽管原始的 employee对象很复杂,但它的结构和对象的含义已经被完整的体现在JSON中了,在ES中将对象转化为JSON并做索引要比在表结构中做相同的事情简单的多。
文档的必须三个节点:
  1. _index : “crm”, 文档存储位置(索引)
  2. _type : “user”,文档映射类型
  3. _id : 1,文档唯一标识(可以自定义也可以自动生成)
ES文档的CRUD
以员工对象为例,,类比传统的数据库来看:
  1. 关系数据库(MYSQL) -> 数据库DB-> 表TABLE-> 行ROW-> 列Column
  2. Elasticsearch -> 索引库Indices -> 类型Types -> 文档Documents -> 字段Fields

ES集群可以包含多个索引(indices)(数据库),每一个索引库中可以包含多个类型(types)(表),每一个类型包含多个文档(documents)(行),然后每个文档包含多个字段(Fields)(列)。

//这里使用Kibana5编写的
# 创建crm
PUT crm# 保存数据
POST crm/user/1
{"age" : 1,"name": "fq"
}# 取值 (_source查看源数据)
GET crm/user/1//展示结果
{"_index": "crm","_type": "user","_id": "1","_version": 3,"found": true,"_source": {"age": 1,"name": "fq"}
}/*
这个API 似乎 允许你修改文档的局部,但事实上Elasticsearch
遵循与之前所说完全相同的过程,这个过程如下:
1. 从旧文档中检索JSON
2. 修改它
3. 删除旧文档
4. 索引新文档
*/
# 存在修改,不存在创建(先删除在创建)
POST crm/user/1
{"age" : 2,"name": "fqq"
}
# 取值(_source只看源数据)
GET crm/user/1/_source//展示结果
{"age": 2,"name": "fqq"
}# 删除文档
DELETE crm/user/1
//查询会查询不到,没有结果返回# 获取所有文档
GET _search# 分页查询
/*和SQL使用 LIMIT  关键字返回只有一页的结果一样,Elasticsearch接受 from  和 size  参数:
size  : 每页条数,默认 10
from  : 跳过开始的结果数,默认 0
*/
GET _search?size=5&from=10

DSL查询与过滤

概念

由ES提供丰富且灵活的查询语言叫做DSL查询(Query DSL),它允许你构建更加复杂、强大的查询。

DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现。

     //查询字符串模式:同样是使用Kibana5GET itsource/employee/_search?q=fullName:倪先华DSL模式:GET itsource/employee/_search{"query" : {"match" : {"fullName" : "倪先华"}}}

DSL查询

使用DSL查询,必须要传递query参数给ES。

 GET _search{"query": YOUR_QUERY_HERE}# 实例一个完整查询/*查询公司员工性别为女的员工,并按照加入时间降序、年龄升序排列,最终返回第21条至30条数据(只返回名字、年龄和email字段)*/GET itsource/employee/_search{"query": {"match": {"sex":"女"}},"from": 20, "size": 10," _source": ["fullName", "age", "email"],"sort": [{"join_date": "desc"},{"age": "asc"}]}

DSL过滤

DSL过滤语句和DSL查询语句非常相似,但是它们的使用目的却不同:
DSL过滤查询文档的方式更像是对于我的条件“有”或者“没有”,而DSL查询语句则像是“有多像”。
DSL过滤和DSL查询在性能上的区别:

  • 过滤结果可以缓存并应用到后续请求。
  • 查询语句同时匹配文档,计算相关性,所以更耗时,且不缓存。
  • 过滤语句可有效地配合查询语句完成文档过滤。

原则上,使用DSL查询做全文本搜索或其他需要进行相关性评分的场景,其它全用DSL过滤

使用方式

{"query": {"bool": {# 必须条件"must": [{"match": {"description": "search" }}],# 过滤条件 "filter": {"term": {"tags": "lucene"}}}}
}//① 全匹配(match_all)
//普通搜索(匹配所有文档):
{"query" : {"match_all" : {}}
}
//如果需要使用过滤条件(在所有文档中过滤,红色部分默认可不写):
{"query" : {"bool" : {"must" : [{"match_all":{}}],"filter":{....}}}
}
/*② 标准查询(match和multi_match)
match查询是一个标准查询,不管你需要全文本查询还是精确查询基本上都要用到它。
如果你使用match查询一个全文本字段,它会在真正查询之前用分析器先分析查询字符:*/
{"query": {"match": {"fullName": "Steven King"}}
}
//上面的搜索会对Steven King分词,并找到包含Steven或King的文档,然后给出排序分值。//如果用 match  下指定了一个确切值,在遇到数字,日期,布尔值或者 not_analyzed的字符串时,它将为你搜索你给定的值,如:
{ "match": { "age": 26 }}
{ "match": { "date": "2014-09-01" }}
{ "match": { "public": true }}
{ "match": { "tag": "full_text" }}//multi_match  查询允许你做 match查询的基础上同时搜索多个字段:
{"query":{"multi_match": {"query": "Steven King",
"fields": [ "fullName", "title" ]
}
}
}
/*上面的搜索同时在fullName和title字段中匹配。
提示:match一般只用于全文字段的匹配与查询,一般不用于过滤。*///③单词搜索与过滤(Term和Terms)
{"query": {"bool": {"must": { "match_all": {} }, "filter": { "term": { "tags": "elasticsearch" } } } }
}
//Terms搜索与过滤
{"query": {"terms": {"tags": ["jvm", "hadoop", "lucene"],"minimum_match": 2}}
}
//minimum_match:至少匹配个数,默认为1/*④ 组合条件搜索与过滤(Bool)
组合搜索bool可以组合多个查询条件为一个查询对象,查询条件包括must、should和must_not。
例如:查询爱好有美女,同时也有喜欢游戏或运动,且出生于1990-06-30及之后的人。*/
{"query": {"bool": {"must": [{"term": {"hobby": "美女"}}],"should": [{"term": {"hobby": "游戏"}},{"term": {"hobby": "运动"}}],"must_not": [{"range" :{"birth_date":{"lt": "1990-06-30"}}} ],"filter": [...],"minimum_should_match": 1}}
}
//提示: 如果 bool 查询下没有must子句,那至少应该有一个should子句。但是 如果有 must子句,那么没有 should子句也可以进行查询。
/*
⑤ 范围查询与过滤(range)
range过滤允许我们按照指定范围查找一批数据:*/
{"query":{"range": {"age": {"gte": 20,"lt": 30}}}
}
//上例中查询年龄大于等于20并且小于30。
//gt:>    gte:>=   lt:<  lte:<=/*⑥ 存在和缺失过滤器(exists和missing)*/
{"query": {"bool": {"must": [{"match_all": {}}],"filter": {"exists": { "field": "gps" }}}}
}
/*提示:exists和missing只能用于过滤结果。
⑦ 前匹配搜索与过滤(prefix)
和term查询相似,前匹配搜索不是精确匹配,而是类似于SQL中的like ‘key%’*/
{"query": {"prefix": {"fullName": "倪"}}
}
//上例即查询姓倪的所有人。/*⑧ 通配符搜索(wildcard)
使用*代表0~N个,使用?代表1个。*/
{"query": {"wildcard": {"fullName": "倪*华"}}
}

ES(ElasticSearch)分布式全文搜索引擎介绍及使用方式相关推荐

  1. 分布式全文搜索引擎ElasticSearch

    认识ElasticSearch 为什么要使用ElasticSearch 虽然全文搜索领域,Lucene可以被认为是迄今为止最先进.性能最好的.功能最全的搜索引擎库. 但是,Lucene只是一个库.想要 ...

  2. Elasticsearch(全文搜索引擎)

    Elasticsearch 一. 简介 ​ Elasticsearch是一个搜索引擎,它底层是基于Lucene来实现的. ​ Lucene是一个Java库,它存在着一定的问题,如果项目的开发语言不是J ...

  3. ES(Elasticsearch)全文搜索引擎(最全)入门基本语法与在SpringBoot中的实战

    注:本文较长,根据个人情况有些内容可以跳过,前面是基本的概述,中间是一些基于es的一个可视化工具进行操作,代码实现在最下边: 一.认识Elasticsearch 1.1.为什么要使用Elasticse ...

  4. 分布式全文搜索引擎——Elasticsearch

    1.安装Elasticsearch a.下载:从官网下载 Elasticsearch,地址:https://www.elastic.co/cn/downloads/past-releases#elas ...

  5. ElasticSearch全文搜索引擎

    一.ElasticSearch简介 1.1 什么是ElasticSearch ElasticSearch简称ES,其中Elastic      从名字里我们可以知道,ES的特点就在于灵活的搜索,其实E ...

  6. 一文看懂-ElasticSearch全文搜索引擎

    一文看懂-ElasticSearch全文搜索引擎 一.ElasticSearch简介 1.1 什么是ElasticSearch ElasticSearch简称ES,其中Elastic 从名字里我们可以 ...

  7. ElasticSearch——全文搜索引擎

    一.为什么需要全文搜索引擎? 首先先来了解一个概念,在我们生活中一般来说有两种数据:结构化数据.非结构化数据 结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等. 非结构化数据: 非结构化 ...

  8. Elasticsearch实战---------相关名词介绍

    ElasticSearch 分布式的搜索引擎和数据分析引擎 应用场景 1.可以处理海量数据 2.elk 优点 1.ES有分片的概念,一个大的索引会被自动分成多个分片来进行存储数据,使用分布式的架构对分 ...

  9. 为什么要用全文搜索引擎:全文搜索引擎 VS 数据库管理系统

    正文一:Full Text Search Engines vs. DBMS  发表于2009年 正文二:Elasticsearch - A High-Performance Full-Text Sea ...

最新文章

  1. 第十二周项目三-数组类运算的实现
  2. mockito_Eclipse的Mockito模板
  3. Caused by: android.os.NetworkOnMainThreadException错误解决办法
  4. 多线程 java 实例_Java多线程实例学习
  5. PyTorch 1.0 中文官方教程:PyTorch 介绍
  6. JavaScript 必会的知识点
  7. hihocoder-Week195-奖券兑换
  8. wps linux 字体目录在哪个文件夹,WPS OFFICE怎么添加字体?(我下载的字体文件应当放那个文件夹?)...
  9. adb 黑域app_黑域ADB报错解决方法
  10. 游戏数据分析-玩家战力分析
  11. 手把手教你解决U盘快捷方式病毒
  12. 22.信息系统安全管理-策略7定.方案.安全体系架构.PKI.PMI
  13. 假期培训总结——初三寒假
  14. 用PS把一张图片变成素描画
  15. DeepLearning学习笔记(1)“调参之路”_ by HZC
  16. 分析股票怎么进行量化交易?
  17. pythonl练习1
  18. 2023年医院常用医疗设备维修培训计划
  19. 【Flutter实现表格上下左右滚动】
  20. node.js 安装,详细步骤教程

热门文章

  1. 【bzoj4715】囚人的旋律 dp
  2. html5果树,这5种阳台果树,产量高好养活,当年就能结果,再也不买水果吃了
  3. Unity3D显示中文字体
  4. 喜欢玩手游的小姐姐注意了!高颜值游戏专属低延迟蓝牙耳机推荐
  5. 计算机内存不足怎样解决,怎么解决电脑内存不足的问题
  6. Canence第11篇之Allegro16.6铺铜设置及删除死铜的方法
  7. linux系统基本命令实验原理,《操作系统原理与Linux》实验一 Linux基本命令.doc
  8. 10月15日深圳见!开放原子开源基金会·区块链工作组成立大会来了
  9. Linux内核第一宏:container_of
  10. Windows10 Edge 浏览器不能访问网页