ElasticSearch是一个高度可扩展的开源搜索引擎并使用REST API,所以您值得拥有。 在本教程中,将介绍开始使用ElasticSearch的一些主要概念。

下载并运行ElasticSearch

ElasticSearch可以从https://www.elastic.co/cn/downloads/下载对应的文件格式,如ZIPTAR.GZ。下载并提取一个运行它的软件包之后,需要提前安装Java运行时环境。

在Windows上运行ElasticSearch

在本文章中,所使用的环境是Windows,所以这里只介绍在Windows上运行ElasticSearch,可从命令窗口运行位于bin文件夹中的elasticsearch.bat。这将会启动ElasticSearch在控制台的前台运行,这意味着我们可在控制台中看到运行信息或一些错误信息,并可以使用CTRL + C停止或关闭它。
当前版本是: elasticsearch-5.2.0
下载链接: http://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.2.0.zip
把下载好的文件 elasticsearch-5.2.0.zip 解压到 D:\elasticsearch-5.2.0,其目录结构如下所示

启动 ElasticSearch

D:\elasticsearch-5.2.0>cd binD:\elasticsearch-5.2.0\bin>elasticsearch.bat
[2019-08-28T15:48:31,291][INFO ][o.e.n.Node               ] [] initializing ...
[2019-08-28T15:48:31,831][INFO ][o.e.e.NodeEnvironment    ] [ZGmKGCe] using [1]
data paths, mounts [[Windows7_OS (C:)]], net usable_space [35.1gb], net total_sp
ace [100gb], spins? [unknown], types [NTFS]
[2019-08-28T15:48:31,832][INFO ][o.e.e.NodeEnvironment    ] [ZGmKGCe] heap size
[1.9gb], compressed ordinary object pointers [true]
[2019-08-28T15:48:31,864][INFO ][o.e.n.Node               ] node name [ZGmKGCe]
derived from node ID [ZGmKGCepRqqZJnsrQgy8jw]; set [node.name] to override
[2019-08-28T15:48:31,893][INFO ][o.e.n.Node               ] version[5.2.0], pid[
2584], build[24e05b9/2017-01-24T19:52:35.800Z], OS[Windows 7/6.1/amd64], JVM[Ora
cle Corporation/Java HotSpot(TM) 64-Bit Server VM/1.8.0_211/25.211-b12]
[2019-08-28T15:48:34,249][INFO ][o.e.p.PluginsService     ] [ZGmKGCe] loaded mod
ule [aggs-matrix-stats]
[2019-08-28T15:48:34,462][INFO ][o.e.p.PluginsService     ] [ZGmKGCe] loaded mod
ule [ingest-common]
[2019-08-28T15:48:34,504][INFO ][o.e.p.PluginsService     ] [ZGmKGCe] loaded mod
ule [lang-expression]
[2019-08-28T15:48:34,916][INFO ][o.e.p.PluginsService     ] [ZGmKGCe] loaded mod
ule [lang-groovy]
[2019-08-28T15:48:35,048][INFO ][o.e.p.PluginsService     ] [ZGmKGCe] loaded mod
ule [lang-mustache]
[2019-08-28T15:48:35,051][INFO ][o.e.p.PluginsService     ] [ZGmKGCe] loaded mod
ule [lang-painless]
[2019-08-28T15:48:35,059][INFO ][o.e.p.PluginsService     ] [ZGmKGCe] loaded mod
ule [percolator]
[2019-08-28T15:48:35,063][INFO ][o.e.p.PluginsService     ] [ZGmKGCe] loaded mod
ule [reindex]
[2019-08-28T15:48:35,070][INFO ][o.e.p.PluginsService     ] [ZGmKGCe] loaded mod
ule [transport-netty3]
[2019-08-28T15:48:35,073][INFO ][o.e.p.PluginsService     ] [ZGmKGCe] loaded mod
ule [transport-netty4]
[2019-08-28T15:48:35,075][INFO ][o.e.p.PluginsService     ] [ZGmKGCe] no pluginsloaded
[2019-08-28T15:48:40,674][INFO ][o.e.n.Node               ] initialized
[2019-08-28T15:48:40,677][INFO ][o.e.n.Node               ] [ZGmKGCe] starting .
..
[2019-08-28T15:48:42,432][INFO ][o.e.t.TransportService   ] [ZGmKGCe] publish_ad
dress {127.0.0.1:9300}, bound_addresses {127.0.0.1:9300}, {[::1]:9300}
[2019-08-28T15:48:45,535][INFO ][o.e.c.s.ClusterService   ] [ZGmKGCe] new_master{ZGmKGCe}{ZGmKGCepRqqZJnsrQgy8jw}{nwAiNuHXSh-r-tz6VApozA}{127.0.0.1}{127.0.0.1:
9300}, reason: zen-disco-elected-as-master ([0] nodes joined)
[2019-08-28T15:48:45,918][INFO ][o.e.g.GatewayService     ] [ZGmKGCe] recovered
[0] indices into cluster_state
[2019-08-28T15:48:46,279][INFO ][o.e.h.HttpServer         ] [ZGmKGCe] publish_ad
dress {127.0.0.1:9200}, bound_addresses {127.0.0.1:9200}, {[::1]:9200}
[2019-08-28T15:48:46,279][INFO ][o.e.n.Node               ] [ZGmKGCe] started

在启动过程中,ElasticSearch的实例运行会占用大量的内存,所以在这一过程中,电脑会变得比较慢,需要耐心等待,启动加载完成后电脑就可以正常使用了。

如果您没有安装Java运行时或没有正确配置,应该不会看到像上面的输出,而是一个消息说“JAVA_HOME环境变量必须设置!“ 要解决这个问题,首先下载并安装Java,其次,确保已正确配置JAVA_HOME环境变量。

启动以后我们就可以通过浏览器访问ElasticSearch web端 地址是http://localhost:9200/,效果如下图所示

使用REST API与Sense

ElasticSearch的实例并运行,您可以使用localhost:9200,基于JSON的REST API与ElasticSearch进行通信。使用任何HTTP客户端来通信。在ElasticSearch自己的文档中,所有示例都使用curl。 但是,当使用API时也可使用图形客户端(如Fiddler或RESTClient),这样操作起更方便直观一些。

更方便的是Chrome插件Sense。 Sense提供了一个专门用于使用ElasticSearch的REST API的简单用户界面。 它还具有许多方便的功能(具体安装见文章链接https://blog.csdn.net/qq_40241957/article/details/100133121),例如:ElasticSearch的查询语法的自动完成功能以及curl格式的复制和粘贴请求,从而可以方便地在文档中运行示例。

我们将在本教程中使用sense来执行curl请求,建议安装Sense并使用它学习后续文章内容。
安装完成后,在Chrome的右上角找到Sense的图标。 第一次单击它运行Sense时,会为您准备一个非常简单的示例请求。如下图所示

上述请求将执行最简单的搜索查询,匹配服务器上所有索引中的所有文档。针对ElasticSearch运行,Sense提供的最简单的查询,在响应结果的数据中并没有查询到任何数据,因为没有任何索引。

{"took": 1,"timed_out": false,"_shards": {"total": 0,"successful": 0,"failed": 0},"hits": {"total": 0,"max_score": 0,"hits": []}
}

下一步我们来学习添加一些数据和索引,来修复这个问题。

文档管理(CRUD)

想要使用ElasticSearch,用于搜索第一步就是使用一些数据填充来索引

创建索引

在ElasticSearch索引中,对应于CRUD中的“创建”和“更新” - 如果对具有给定类型的文档进行索引,并且要插入原先不存在的ID。 如果具有相同类型和ID的文档已存在,则会被覆盖。

要索引一个JSON对象,我们对REST API创建一个PUT请求到一个由索引名称,类型名称和ID组成的URL。 也就是:http://localhost:9200/<index>/<type>/[<id>]
索引和类型是必需的,而id部分是可选的。如果不指定IDElasticSearch会为我们生成一个ID。 但是,如果不指定id,应该使用HTTP的POST而不是PUT请求。 (解释:比如curl -XPUT "http://localhost:9200/movies/movie/1" -d'就是PUT请求,curl -XGET "http://localhost:9200/movies/movie/1" -d''就是GET请求
索引名称是任意的。如果服务器上没有此名称的索引,则将使用默认配置来创建一个索引。
至于类型名称,它也是任意的。 它有几个用途,包括:

  • 每种类型都有自己的ID空间。
  • 不同类型具有不同的映射(“模式”,定义属性/字段应如何编制索引)。
  • 搜索多种类型是可以的,并且也很常见,但很容易搜索一种或多种指定类型。

现在我们来创建一个索引! 可以把任何东西放到索引(解释:索引就类似于“数据库”)中,只要它可以表示为单个JSON对象。 在本教程中,使用索引来搜索电影做一个示例。这是一个经典的电影对象信息:

{"title": "The Godfather","director": "Francis Ford Coppola","year": 1972
}

要创建一个索引,这里使用索引的名称为“movies”,类型名称(“movie”)和id(“1”),在Sense里面写下面的代码,然后执行,就会在elasticSearch中创建一个索引

curl -XPUT "http://localhost:9200/movies/movie/1" -d'
{"title": "The Godfather","director": "Francis Ford Coppola","year": 1972
}

可以使用curl来执行它,也可以使用Sense。这里使用Sense,可以自己填充URL,方法和请求正文,或者您复制上述curl示例,将光标置于Sense中的正文字段中写入上面的Json对象,然后按点击绿色小箭头来执行创建索引操作。如下图所示

执行请求后,可以看到接收到来自ElasticSearch响应的JSON对象。如上图右半部分所示
响应对象包含有关索引操作的信息,例如它是否创建成功(“true”)和文档ID,如果不指定则ElasticSearch会自己生成一个。

更新索引

现在,在索引中有了一部电影信息,接下来来了解如何更新它。要做到这一点,只需使用相同的ID索引它。使用与之前完全相同的索引请求,但类型扩展了JSON对象。比如我们在原电影信息的基础上加一个"genres": [“Crime”, “Drama”],如下代码所示

curl -XPUT "http://localhost:9200/movies/movie/1" -d'
{"title": "The Godfather","director": "Francis Ford Coppola","year": 1972,"genres": ["Crime", "Drama"]
}

ElasticSearch的响应结果与前面的大体上一样,但有一点区别,结果对象中的_version属性的值为2,而不是1。响应结果如下

版本号(_version)可用于跟踪文档已编入索引的次数。它的主要目的是允许乐观的并发控制,因为可以在索引请求中提供一个版本,如果提供的版本高于索引中的版本,ElasticSearch将只覆盖文档内容,ID值不变,版本号自动添加。

由ID获取文档/索引

上面已经学习了索引新文档以及更新存在的文档。还看到了一个简单搜索请求的示例。如果只是想检索一个具有已知ID的索引,一个方法是搜索索引中的文档。另一个简单而快速的方法是通过ID,使用GET来检索它。

简单的做法是向同一个URL发出一个GET请求,URL的ID部分是强制性的。通过ID从ElasticSearch中检索文档可发出URL的GET请求:http://localhost:9200/<index>/<type>/<id>
使用以下请求尝试获取电影信息:

curl -XGET "http://localhost:9200/movies/movie/1" -d''

执行结果如下所示 -

正如上图所看到的,结果对象包含与索引时所看到的类似的元数据,如索引,类型和版本信息。 最后最重要的是,它有一个名称为“_source”的属性,它包含实际获取的文档信息。
关于GET没有什么可说的,因为它很简单,继续最后删除操作.

删除文档

为了通过ID从索引中删除单个指定的文档,使用与获取索引文档相同的URL,只是这里将HTTP方法更改为DELETE

curl -XDELETE "http://localhost:9200/movies/movie/1" -d''

响应对象包含元数据方面的一些常见数据字段,以及名为“_found”的属性,表示文档确实已找到并且操作成功。

在执行DELETE调用后切换回GET,可以验证文档是否确实已删除。

搜索

在前面,已经介绍了在ElasticSearch索引中处理数据的基础知识,现在是时候进行核心功能的学习了。考虑到之前我们删除索引中的所有文档,所以,在进行搜索 学习之前,需要一些添加一些示例数据。使用以下这些请求和数据对象来创建索引。

curl -XPUT "http://localhost:9200/movies/movie/1" -d'
{"title": "The Godfather","director": "Francis Ford Coppola","year": 1972,"genres": ["Crime", "Drama"]
}'curl -XPUT "http://localhost:9200/movies/movie/2" -d'
{"title": "Lawrence of Arabia","director": "David Lean","year": 1962,"genres": ["Adventure", "Biography", "Drama"]
}'curl -XPUT "http://localhost:9200/movies/movie/3" -d'
{"title": "To Kill a Mockingbird","director": "Robert Mulligan","year": 1962,"genres": ["Crime", "Drama", "Mystery"]
}'curl -XPUT "http://localhost:9200/movies/movie/4" -d'
{"title": "Apocalypse Now","director": "Francis Ford Coppola","year": 1979,"genres": ["Drama", "War"]
}'curl -XPUT "http://localhost:9200/movies/movie/5" -d'
{"title": "Kill Bill: Vol. 1","director": "Quentin Tarantino","year": 2003,"genres": ["Action", "Crime", "Thriller"]
}'curl -XPUT "http://localhost:9200/movies/movie/6" -d'
{"title": "The Assassination of Jesse James by the Coward Robert Ford","director": "Andrew Dominik","year": 2007,"genres": ["Biography", "Crime", "Drama"]
}

_search端点

现在已经把一些电影信息放入了索引,可以通过搜索看看是否可找到它们。 为了使用ElasticSearch进行搜索,我们使用_search端点,可选择使用索引和类型。也就是说,按照以下模式向URL发出请求:http://localhost:9200/<index>/<type>/_search。其中,indextype都是可选的。

换句话说,为了搜索电影,可以对以下任一URL进行POST请求:

  • http://localhost:9200/_search - 搜索所有索引和所有类型。(既没有指定index,也没有指定type
  • http://localhost:9200/movies/_search - 在电影索引中搜索所有类型(因为只指定了index,没指定type)
  • http://localhost:9200/movies/movie/_search - 在电影索引中显式搜索电影类型的文档。(既指定了index,也指定了type

因为我们只有一个单一的索引和单一的类型,所以怎么使用都不会有什么问题。为了简洁起见使用第一个URL。

搜索请求正文和ElasticSearch查询DSL

如果只是发送一个请求到上面的URL,我们会得到所有的电影信息。为了创建更有用的搜索请求,还需要向请求正文中提供查询。 请求正文是一个JSON对象,除了其它属性以外,它还要包含一个名称为“query”的属性,这就可使用ElasticSearch的查询DSL。

{"query": {//Query DSL here}
}

你可能想知道查询DSL是什么。它是ElasticSearch自己基于JSON的域特定语言,可以在其中表达查询和过滤器。想象ElasticSearch它像关系数据库的SQL。

基本自由文本搜索

现在尝试在几部电影的标题中搜索有“kill”这个词的电影信息:

curl -XPOST "http://localhost:9200/_search" -d'
{"query": {"query_string": {"query": "kill"}}
}'

执行上面的请求并查看结果,如下所示

再看看另一种情况,在特定字段中搜索。

指定搜索的字段

这样的设置称为“fields”,可用于指定要搜索的字段列表。如果不使用“fields”字段,ElasticSearch查询将默认自动生成的名为“_all”的特殊字段,来基于所有文档中的各个字段匹配搜索。
为了做到这一点,修改以前的搜索请求正文,以便查询字符串查询有一个fields属性用来要搜索的字段数组:

curl -XPOST "http://localhost:9200/_search" -d'
{"query": {"query_string": {"query": "ford",     //指定搜索字段的值"fields": ["title"]    //指定搜索字段}}
}'

执行上面查询它,看看会有什么结果(应该只匹配到 1 条数据):

正如预期的得到一个命中,电影的标题中的单词“ford”。现在,从查询中移除fields属性,应该能匹配到 3 行数据:

过滤

前面已经介绍了几个简单的自由文本搜索查询。现在来看看另一个示例,搜索“drama”,不明确指定字段,如下查询

curl -XPOST "http://localhost:9200/_search" -d'
{"query": {"query_string": {"query": "drama"}}
}'

执行结果如下图:

因为在索引中有五部电影在_all字段(从所有类别字段)中包含单词“drama”,所以得到了上述查询的5个命中。 现在,想象一下,如果我们想限制这些命中为只是1962年发布的电影。要做到这点,需要应用一个过滤器,要求“year”字段等于1962

要添加过滤器,修改搜索请求正文,以便当前的顶级查询(查询字符串查询)包含在过滤的查询中:

POST /_search
{"query": {"bool": {"filter": {"query_string": {"query": "drama"}},"must": {   "match": { "year": 1962 }  //这里填写过滤条件}}}
}

执行结果如下:当执行上面请求,只得到两个命中,这个两个命中的数据的 year 字段的值都是等于 1962

无需查询即可进行过滤

下面的match_all指“所有的字段”, 所以下面的代码的意思就是“”对所有的字段都进行过滤条件的查找“”

POST /_search
{"query": {"bool": {"filter": {"match_all": {  //对所有字段都进行过滤}},"must": { //过滤条件"match": { "year": 1962 }}}}
}

执行结果如下:

另一个更简单的方法是使用常数分数查询:
讲解:下面的constant_score的作用是“将查找之后的结果按照过滤条件匹配的频率大小来排序,比如某一条记录里面出现"year": 1962,出现了很多次,那么他就优先级更高,优先展示出来”

POST /_search
{"query": {"constant_score": {"filter": {"term": { "year": 1962 }}}      }
}

本文转载自:https://www.yiibai.com/elasticsearch/elasticsearch-getting-start.html

Elasticsearch入门教程相关推荐

  1. python elasticsearch 入门教程(二) ---全文搜索

    python elasticsearch 入门教程(二) ---全文搜索 截止目前的搜索相对都很简单:单个姓名,通过年龄过滤.现在尝试下稍微高级点儿的全文搜索--一项 传统数据库确实很难搞定的任务. ...

  2. ElasticSearch入门教程-索引

    ElasticSearch入门教程-索引 在本节中,我们将向Elasticsearch添加一些索引,映射和数据.此数据将用于本教程中说明的示例中. 创建索引 PUT http://localhost: ...

  3. ElasticSearch入门教程(1)

    目录 1.1ElasticSearch是什么? 2.1Elasticsearch安装 2.1.1 下载软件 2.2.2使用Postman客户端工具 2.2.3数据格式 正(排)向索引 倒排索引 2.2 ...

  4. ElasticSearch 入门教程笔记

    视频教程:[狂神说Java]ElasticSearch7.6.x最新完整教程通俗易懂 视频地址:https://www.bilibili.com/video/BV17a4y1x7zq 拒绝白嫖,感谢狂 ...

  5. Elasticsearch系列-Elasticsearch入门教程

    引言 Elasticsearch是著名的开源分布式搜索和数据处理平台,是一个基于Lucene的分布式.实时.全文搜索系统,其稳定.可靠.高可用.可大规模扩展等特性,使得Elasticsearch的应用 ...

  6. python elasticsearch 入门教程(一)

    写入数据 from elasticsearch import Elasticsearch es = Elasticsearch() body1={"first_name" : &q ...

  7. Elasticsearch 入门教程

    目录 一.安装 二.基本概念 2.1 Node 与 Cluster 2.2 Index 2.3 Document 2.4 Type 三.新建和删除 Index 四.中文分词设置 五.数据操作 5.1 ...

  8. ElasticSearch入门教程--安装

    Elasticsearch - 安装 安装Elasticsearch的步骤如下 - 第1步 - 检查安装好计算机的java的最低版本,它应该是java 7或更高版本.您可以通过执行以下操作进行检查 - ...

  9. Elasticsearch入门教程(五):Elasticsearch查询(一)

    // 准备数据 PUT /shop/goods/1 {"name": "2017新款女装冬季外套ulzzang棉袄中长款棉衣韩版百搭棉服面包服","d ...

最新文章

  1. java图形用户界面添加背景颜色不成功的解决方案
  2. py文件打包或apk_Python文件打包成exe很简单,如果安卓手机也能运行的软件你会吗...
  3. wordpress mysql 安装_wordpress 搭建安装教程 1 安装数据库、SQLyog
  4. 格莱泽检验matlab,计量经济学实验指导书
  5. 敏捷方法在测试计划中的应用
  6. Python猜字游戏(用函数)(最新版)
  7. L3-002. 堆栈-PAT团体程序设计天梯赛GPLT(树状数组)
  8. 线性规划 (二) 单纯形法
  9. Ajax_jquery库中Ajax方法的使用
  10. apache部署mo_python
  11. Java面向对象的三大特征
  12. 二路归并排序和基数排序
  13. 在线象棋游戏php网站源码分享
  14. 决策树CART 代价复杂度剪枝
  15. 人脸识别可视化项目实现过程Bug记录
  16. 河北软件职业技术学院计算机专业在哪个校区,河北软件职业技术学院有几个校区,哪个校区最好及各校区介绍...
  17. CentOS7.6系统安装步骤
  18. 随着新日益增多的技术,如何正确的提升自己?
  19. tomcat服务器一直自动关,项目在tomcat里运行一段时间总是自动崩掉的问题排查与解决...
  20. Linux搭建FTP,并使用Windows和IE浏览器访问FTP服务

热门文章

  1. ProE二次开发 Creo二次开发 MCADEx Tools 参数工具
  2. Android Studio检查依赖库是否有新版本,非常好用
  3. 从全球看,中国企业面临双重困境
  4. 计算广告小窥[上]您好,了解一下
  5. SAP ABAP TRY CATCH
  6. Onvif Profile简介
  7. AtCoder Beginner Contest 262(ABC262)A-Ex 题解
  8. 阿拉伯整数转成人民币表示
  9. 差分方程c语言,filter函数 C语言差分方程
  10. Spring Boot Jpa之CascadeType