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. 内存的缓存被清除,等待接受新的文档

ES学习笔记的更多相关文章

  1. OpenGL ES学习笔记(三)——纹理

    首先申明下,本文为笔者学习<OpenGL ES应用开发实践指南(Android卷)>的笔记,涉及的代码均出自原书,如有需要,请到原书指定源码地址下载. <OpenGL ES学习笔记( ...

  2. OpenGL ES 学习笔记 - Overview - 小旋的博客

    移动端图形标准中,目前 OpenGL ES 仍然是比较通用的标准(Vulkan 则是新一代),这里新开一个系列用于记录学习 OpenGL ES 的历程,以便查阅理解. OverView OpenGL ...

  3. OpenGL ES学习笔记(二)——平滑着色、自适应宽高及三维图像生成

    首先申明下,本文为笔者学习<OpenGL ES应用开发实践指南(Android卷)>的笔记,涉及的代码均出自原书,如有需要,请到原书指定源码地址下载. <Android学习笔记--O ...

  4. OpenGL ES学习笔记(一)——基本用法、绘制流程与着色器编译

    首先声明下,本文为笔者学习<OpenGL ES应用开发实践指南(Android卷)>的笔记,涉及的代码均出自原书,如有需要,请到原书指定源码地址下载. 在Android.iOS等移动平台上 ...

  5. Es 学习笔记 (1)

    目录 前言 什么是es? es数据组织类比 应用场景 核心概念 集群 节点(node) 索引(Index) 文档类型(Type) 文档(Document) Mapping 核心简单域类型 分片(sha ...

  6. 【ES】elasticsearch学习笔记

    ES学习 1 优势 1.1 简单 1.1.1 相比Solor配置部署等非常简单 1.2 高效 1.2.1 ES使用Netty作为内部RPC框架,Solor使用Jetty 1.3 插件化 1.3.1 E ...

  7. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  8. TEX学习笔记

    整理在这里, 方便以后容易查找. 毕竟每个tex的模板有些不一样. Beamer: Latex beamer 学习总结 http://blog.sina.com.cn/s/blog_6cf921f30 ...

  9. Android学习笔记(二)——探究一个活动

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 活动(Activity)是最容易吸引到用户的地方了,它是一种可以包含用户界面的组件,主要用于和用户进行交互.一 ...

随机推荐

  1. ORA-00918: 未明确定义列

    ORA-00918: 未明确定义列 出现问题原因及解决办法. --正常写,结果带上表名的字段在处理后表头名称相同,在进行下一次嵌套时就会出现问题  select au.userxm,au01.user ...

  2. jquery判断邮箱对错

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. [UWP]了解模板化控件(4):TemplatePart

    1. TemplatePart TemplatePart(部件)是指ControlTemplate中的命名元素.控件逻辑预期这些部分存在于ControlTemplate中,并且使用protected ...

  4. J2SE之基础语法总结一

    1.标识符: (1)简单来说凡是可以起名字的地方都叫标识符,起标识符的时候要见名知意. (2)标识符由字母.数字.美元符$和下划线组成,标识符应以字母.下划线.$开头,注意不能以数字开头. (3)ja ...

  5. 优化php性能的一点总结

    图示为100个并发,请求1000次目标地址 进行测试 最重要的两个参数:Requests per second :每秒接受请求数,这里每秒接收101个请求 Time per request:一个请求用 ...

  6. 通过修改CoreCLR中的ClrHost实现自托管程序

    上一篇我们讲了如何在windows和Linux上编译CoreClr的问题 虽然文章使用的是windows 10 (Bash)环境,但是也可以做为ubuntu环境的参考. 成功编译CoreCLR的源代码 ...

  7. loopj.com android-async-http

    loopj.com android-async-http Android异步Http客户端 用于Android的基于回调的Http客户端库   下载版本1.4.9(最新) 或者在github上fork ...

  8. 使用Block传值

    使用Block的地方很多,其中传值只是其中的一小部分,下面介绍Block在两个界面之间的传值: 先说一下思想: 首先,创建两个视图控制器,在第一个视图控制器中创建一个UILabel和一个UIButto ...

  9. Web性能优化工具WebPageTest(三)——本地部署(Windows 7版本)

    这次先能够使用PC端的浏览器测试,首先需要下载官方的发布版本"WebPageTest 3.0". 1. agent:浏览器代理软件 2. mobile:移动端参数相关代码 3. w ...

  10. Python生产环境部署(fastcgi,uwsgi)

    Python部署web开发程序的几种方法 fastcgi ,通过flup模块来支持,在nginx里对应的配置指令是 fastcgi_pass http,nginx使用proxy_pass转发,这个要求 ...