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. 1113: 零起点学算法20——输出特殊值II

    1113: 零起点学算法20--输出特殊值II Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 207 ...

  2. VS窗体选择BackGroupImage属性报错:已添加具有相同键的项

    高墙我今天第一次遇见这个问题.既然说是"已添加具有相同键的项."那我自然地认为会不会是文件夹哪里命名了两个相同的文件名.然后在这个Exception上越走越远. 好了不说废话.出现 ...

  3. python urllib模块

    1.urllib.urlopen(url[,data[,proxies]]) urllib.urlopen(url[, data[, proxies]]) :创建一个表示远程url的类文件对象,然后像 ...

  4. css 实现旋转八卦图

    虽然这不算什么亮点,不过也可以供路上的小伙伴学习下 直接上干货: <!doctype html> <html lang="en"> <head> ...

  5. mysql加密解密方式用法

    如果你使用的正是mysql数据库,那么你把密码或者其他敏感重要信息保存在应用程序里的机会就很大.保护这些数据免受黑客或者窥探者的获取是一个令人关注的重要问题,因为你既不能让未经授权的人员使用或者破坏应 ...

  6. php数组--2017-04-16

    一.定义数组 (1)索引数组 $arr=array(1,2,3,3); (2)关联数组  类似于集合 $arr1=array("one"=>"111",& ...

  7. php 启动过程 - sapi MINIT 过程

    php 启动过程 - sapi MINIT 过程 sapi 概念 sapi 是 php 的应用编程接口, server 端接收请求通过 sapi 接口层交给 php 处理 不同的 server 端底层 ...

  8. 三步快速解决dll冲突问题

    最近在推广应用我们的分布式服务网关(Web Api):业务组大部分对外的业务逻辑以HSF服务或者自定义扩展插件的方式,注册并发布到分布式服务网关中,统一对外提供WebApi服务.临时介绍下我们的分布式 ...

  9. angular 实现时间段选择组件

    前段时间公司有个后台项目需要使用一个选择时间段的组件,看了一下就自己写了一下,用angular写这种插件还是很简单的. 先看看最终是什么样子的: 功能是用户可以选择任意时间段,鼠标可以拖动任意的一周的 ...

  10. mySql 安装教程

    看了好久别人的文章,今天就开始自己写第一篇.希望给别人能提供帮助,也可以方便自己查阅. 前两天自己安装了mysql,感觉是比oracle好装多了. mysql安装有两种方式,一种是安装包安装方式,一种 ...