关于elasticsearch:ElasticSearch基础

34次阅读

共计 2522 个字符,预计需要花费 7 分钟才能阅读完成。

概述

开源的 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.zip
unzip 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'

正文完
 0