ES学习笔记

ES学习

1. 安装

1.1 ES 安装配置

curl -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.1.2.tar.gz

tar xvf elasticsearch-5.1.2.tar.gz

ln -s elasticsearch-5.1.2 elasticsearch

修改conf/elasticsearch.yaml文件,参考下面的文件

修改句柄 vm.max_map_count
sudo vim + /etc/sysctl.conf 添加一行 vm.max_map_count = 262144
sysctl -p 生效修改(查看more /proc/sys/vm/max_map_count)
临时修改 sysctl -w vm.max_map_count=262144 启动ES ./bin/elasticsearch -d
# ---------------------------------- Cluster(edit)-----------------------------------
cluster.name: tracing-es
# ------------------------------------ Node(edit) ------------------------------------
node.name: es01
#node.attr.rack: r1
# ----------------------------------- Paths ------------------------------------
#path.data: /path/to/data
#path.logs: /path/to/logs
# ----------------------------------- Memory -----------------------------------
#bootstrap.memory_lock: true
# ---------------------------------- Network(edit, 绑定所有)-----------------------------------
network.host: 0.0.0.0
http.port: 9200
# --------------------------------- Discovery(edit)-------------------------------
discovery.zen.ping.unicast.hosts: ["10.10.73.25", "10.10.73.34", "10.10.66.134"]
discovery.zen.minimum_master_nodes: 1
# ---------------------------------- Gateway -----------------------------------
#gateway.recover_after_nodes: 3
# ---------------------------------- Various(add)-----------------------------------
#action.destructive_requires_name: true
http.cors.enabled: true
http.cors.allow-origin: "*"

1.2 ES-Head 安装配置

es5.0之后不能通过.bin/plugin install mobz/elasticsearch-head安装

  • 安装nodejs, 配置环境变量
  • 安装npm(taobao npm)
  • 安装grunt npm install grunt --save
  • 修改head的配置Gruntfile.js
  • npm install
  • 启动服务:./bin/grunt server
  • 访问:http://10.9.31.213:9100

es-head安装遇到的问题,显示集群链接不上,解决方法(第3点重要):

1、修改head源码:目录:head/Gruntfile.js,connect下增加hostname属性,设置为*
2、修改连接地址:目录:head/_site/app.js,修改head的连接地址:this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200";把localhost修改成你es的服务器地址
3、修改elasticsearch的参数:编辑config/elasticsearch.yml:增加新的参数,这样head插件可以访问es 注意,设置参数的时候:后面要有空格! and
http.cors.enabled: true
http.cors.allow-origin: "*"

1.3 ES-Kibana 安装配置

启动方法

设置时区

Management->Advanced Settings

设置:tz->Asia/shanghai

1.4 ES-bigdesk 安装

1. 本地下载bigdesk
2. 打开index.html页面
3. 修改BigdeskStore.js, 定位到142行,major == 1改成major >=1
4.

2. ES基础知识

2.1 ES数据类型

  • string相关的:text
  • 数字相关的:long, integer, short, byte, double, float
  • Boolean类型: boolean
  • 二进制:binary
  • 范围: integer_range, float_range, long_range, double_range, date_range
  • 地理数据:geo_point, geo_shape
  • token_count: count the number of tokens in a string
  • completion to provide auto-complete suggestions

3. ES搜索

3.1 简易搜索

搜索_all字段,_all字段是所有字段集合

GET /index/type/_search?q=xxx
GET /index/type/_search?q=user:xxx

3.2 bool query

bool query对应的是lucene的boolquery

  • must: 多个条件完全匹配, 相当于and
  • filter: 字段必须匹配,不考虑score
  • should: 至少匹配一个,相当于or
  • must_not: 多个条件相反匹配,相当not
GET /_search
{
"query": {
"bool": {
"must": {
"term" : { "user" : "kimchy" }
},
"must_not": {
"term" : { "name" : "kimchy" }
},
"should" : {
{ "term" : { "tag" : "elasticsearch" } }
},
"filter": {
"term": { "content": "update" }
}
}
}
}

3.3 match query

match查询语句会进行分词,搜索

GET /_search
{
"query": {
"match": {
"title": "my first"
}
}
}

3.4 term query

term(项,分词最小项)表示完全匹配,查询语句不进行分词,文档中必须包含整个搜索的词

term:过滤,精确匹配

GET /_search
{
"query": {
"match": {
"title": "my first"
}
}
}

3.5 range query

range: 范围查询

GET /_search
{
"query": {
"range": {
"age": {
"gt":20,
"lt":30
}
}
}
}

3.6 过滤和查询的区别

过滤: 特定词和文档是否匹配,范围匹配,不考虑score,可以走缓存

查询: 特定词和文档过滤值匹配程度,考虑score,不能走缓存

3.7 处理控制

exists: tags字段有值的都会被返回

GET /my_index/posts/_search
{
"query" : {
"filtered" : {
"filter" : {
"exists" : { "field" : "tags" }
}
}
}
}

missing: 该字段没有值的都会返回

GET /my_index/posts/_search
{
"query" : {
"filtered" : {
"filter": {
"missing" : { "field" : "tags" }
}
}
}
}

4. ES Index管理

4.1 新建索引

put /myindex
{
"settings":{
"index" : {
"number_of_shards" : 3, //主分片数量
"number_of_replicas" : 2 //每个主分片的复制分片数量
}
},
"mappings":{
"mytype":{
"properties":{
"filed_a":{"type":"text/integer"}
}
}
}
}

ES深入分片

per-segment机制(动态索引)

Lucene中的索引是段(segment)集合,segment具有完整功能的倒排索引,一个segment可以包含多个文档,在文档初始写入时独占一个segment。

一个per-segment search如下工作

Lucene中的索引是ES的中的一个分片,ES中的索引是分片集合

  1. 新的文档首先写入内存区的索引缓存
  2. 同时这些buffer被提交:
    • 一个新的段——额外的倒排索引——写入磁盘
    • 新的提交点写入磁盘,包括新段的名称
    • 磁盘是fsync’ed(文件同步)——所有写操作等待文件系统缓存同步到磁盘,确保它们可以被物理写入
  3. 新段被打开,它包含的文档可以被检索
  4. 内存的缓存被清除,等待接受新的文档
上一篇:nodejs 实践:express 最佳实践(三) express 解析


下一篇:Perl6多线程3: Promise start / in / await