概述

开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选。
它能够疾速地贮存、搜寻和剖析海量数据。Elastic 的底层是开源库 Lucene。然而,你没法间接用 Lucene,必须本人写代码去调用它的接口。Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。

装置

Elastic 须要 Java 8 环境。如果你的机器还没装置 Java,能够参考这篇文章,留神要保障环境变量JAVA_HOME正确设置。
装置完 Java,就能够跟着官网文档装置 Elastic。间接下载压缩包比较简单。

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.1.zipunzip elasticsearch-5.5.1.zip #解压cd elasticsearch-5.5.1/  #返回装置目录./bin/elasticsearch  #启动服务#./bin/elasticsearch在前台启动服务,若出错会间接显示解决。但启动胜利,会使得命令行无奈执行命令。#因而./bin/elasticsearch -d能够在后盾启动,但后盾启动可能常常失败。

启动呈现谬误:
ERROR: [1] bootstrap checks failed

执行以下命令解决:
sudo sysctl -w vm.max_map_count=262144
注:机器每次重启,都最好执行一次。
相干谬误

curl localhost:9200 #Elastic默认在9200端口运行,这是拜访服务的命令拜访胜利后果如下,返回一个JSON对象。{  "name" : "qhnoMSW",  "cluster_name" : "elasticsearch",  "cluster_uuid" : "7lC0QcTZSxGXO5aknY8clw",  "version" :{     "number" :"5.5.1",    "build_hash" : "19c13d0",    "build_date" : "2017-07-18T20:44:24.823Z",    "build_snapshot" : false,    "lucene_version" : "6.6.0"  },  "tagline" : "You Know, for Search"}

默认的,Elastic只容许本机拜访,若要近程拜访,须要批改以批改 Elastic 装置目录的config/elasticsearch.yml文件(config目录和bin目录同级。去掉network.host的正文,将它的值改成0.0.0.0(设成0.0.0.0让任何人都能够拜访。线上服务不要这样设置,要设成具体的IP),而后重新启动 Elastic。批改后果如下:

network.host: 0.0.0.0 #留神冒号前面有一个空格

若批改时冒号前面没有空格,则启动会呈现上面的谬误:
Exception in thread "main" ElasticsearchParseException[malformed, expected settings to start with 'object', instead was [VALUE_STRING]]
相干谬误

启动时呈现以下正告:
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
解决:批改装置目录下config/jvm.options
-XX:+UseConcMarkSweepGC 改为 -XX:+UseG1GC
参考文章

基本概念

Node和Cluster

Elastic 实质上是一个分布式数据库,容许多台服务器协同工作,每台服务器能够运行多个 Elastic 实例。

单个 Elastic 实例称为一个节点(node)。一组节点形成一个集群(cluster)。

Index

Elastic 会索引所有字段,通过解决后写入一个反向索引(Inverted Index)。查找数据的时候,间接查找该索引。
所以,Elastic 数据管理的顶层单位就叫做 Index(索引)。它是单个数据库的同义词。每个 Index (即数据库)的名字必须是小写。

$ curl -X GET 'http://localhost:9200/_cat/indices?v' #查看以后节点的所有 Index。
Document

Index 外面单条的记录称为 Document(文档)。许多条 Document 形成了一个 Index。每个Document应用JSON格局示意,如下是一个简略的Document:
{
"user": "张三",
"title": "工程师",
"desc": "数据库治理"
}

Type

Document(数据库中的单条记录)能够按不同的规范分组。这种分组叫Type,这是虚构的逻辑分组,用来过滤Document。
不同的 Type 应该有类似的构造(schema),举例来说,id字段不能在这个组是字符串,在另一个组是数值。这是与关系型数据库的表的一个区别。性质齐全不同的数据(比方products和logs)应该存成两个 Index,而不是一个 Index 外面的两个 Type(尽管能够做到)。
列出每个Index所蕴含的Type

$ curl 'localhost:9200/_mapping?pretty=true'

依据布局,Elastic 6.x 版只容许每个 Index 蕴含一个 Type,7.x 版将会彻底移除 Type。

新建和删除Index

新建 Index,能够间接向 Elastic 服务器收回 PUT 申请。上面的例子是新建一个名叫weather的 Index。

$ curl -X PUT 'localhost:9200/weather'

执行后果返回一个 JSON 对象,外面的acknowledged字段示意操作胜利。
{
"acknowledged":true,
"shards_acknowledged":true
}
而后,咱们收回 DELETE 申请,删除这个 Index。

$ curl -X DELETE 'localhost:9200/weather'