1.1、Elasticsearch相关介绍

1.1.1 ES能做什么?
全文检索(全部字段)、模糊查询(搜索)、数据分析(提供分析语法,例如聚合)

1.1.2 ElasticSearch5和ElasticSearch6区别
ElasticSearch6(和ElasticSearch5的区别在于,root用户权限,一个库能否建立多张表)

1.1.3elasticSearch(搜索引擎)B+tree算法
倒排索引(内容上建立索引,用内容匹配索引)

1.2、Elasticsearch安装

1.2.1安装环境:centos7+jdk8
1.2.2配置文件/config elasticsearch.yml(集群文件)与jvm.options(Jvm配置文件)

1.2.3上传解并解压到centos /opt/es目录下
4. 在opt下新建目录:mkdir -p /opt/es
5. 上传并解压 tar -zxvf elasticsearch-6.3.1.tar.gz、elasticsearch-analysis-ik6.rar、kibana-6.3.1-linux-x86_64.tar.gz
6. chmod 777 -R(循环授权所有目录) elasticsearch-6.3.1

1.2.4配置
Es使用最大线程数、最大内存数、访问的最大文件数

  1. 启动脚本elasticsearch

  2. 创建用户并切换

    • 创建用户:adduser es
    • 切换用户:su es
  3. 执行脚本./elasticsearch

  4. 忽略日志启动脚本:nohup ./elasticsearch &

  5. 出现问题

    • Es使用Jvm内存大小不够用
  6. 修改配置文件

    • vim elasticsearch-6.3.1/config/jvm.options 配置jvm的内存大小
  • 在elasticSearch.yml中配置host地址(本机地址),外网允许访问

    • 启动问题:Es使用最大线程数、最大内存数、访问的最大文件数

    • 需要修改两处配置文件

      1. 修改Linux的limits文件,设置内存线程和文件
      2. 修改Linux的sysctl文件,配置系统使用内存
    • Es权限问题

      1. 首先root用户解压: tar -zxvf elasticsearch-6.3.1.tar.gz
      2. chmod 777 -R(循环授权所有目录) elasticsearch-6.3.1

    es文件四处需要修改

    1.3、Elasticsearch的基本概念

    1.通过(9200端口)http协议进行交互

    http://47.101.36.177:9200/_cat/indices?v

    2.基本概念

关键字 含义
cluster 整个elasticsearch 默认就是集群状态,整个集群是一份完整,互备的数 据。
node 集群中的一个节点,一般只一个进程就是一个node
shard 分片,即使是一个节点中的数据也会通过hash算法,分成多个片存放,默认是5片。
index 相当于rdbms的database, 对于用户来说是一个逻辑数据库,虽然物理上会被分多个shard存放,也可能存放在多个node中。
type 类似于rdbms的table,但是与其说像table,其实更像面向对象中的class , 同一Json的格式的数据集合。
document 类似于rdbms的 row、面向对象里的object
field 相当于字段、属性

3.开发工具kibana

  • 解压kibana:tar -zxvf kibana-6.3.1-linux-x86_64.tar.gz
  • 配置kibana的es信息:vim kibanna.yml
  • 启动kibana:nohup ./kibana &
  • 查看kibana的进程id

3.elasticSearch简单版增删改查

  • 插入数据put
PUT /movie_index/movie/1
{ "id":1,"name":"operation red sea","doubanScore":8.5,"actorList":[
{"id":1,"name":"zhang yi"},
{"id":2,"name":"hai qing"},
{"id":3,"name":"zhang han yu"}
]
}
  • 查询数据get

    查询带"红"的所有内容
GET movie_index/movie/_search
{"query": {"match": {"name": "red"}}}

4.elasticSearc对中文的理解

  • 中文拆词
GET _analyze
{"text": "湄公河行动"
}
  • 中文拆词结果
{"tokens": [{"token": "湄","start_offset": 0,"end_offset": 1,"type": "<IDEOGRAPHIC>","position": 0},{"token": "公","start_offset": 1,"end_offset": 2,"type": "<IDEOGRAPHIC>","position": 1},{"token": "河","start_offset": 2,"end_offset": 3,"type": "<IDEOGRAPHIC>","position": 2},{"token": "行","start_offset": 3,"end_offset": 4,"type": "<IDEOGRAPHIC>","position": 3},{"token": "动","start_offset": 4,"end_offset": 5,"type": "<IDEOGRAPHIC>","position": 4}]
}
  • 加入中文分词器

    1. 进入插件目录,解压analysis-ik分词器

    2. IK(中英文分词器)有两个

      • ik_smart(简易分词)
      GET _analyze
      {"analyzer": "ik_smart", "text": "如果缓存中没有再到MySQL"
      }
      

      分词结果

      {"tokens": [{"token": "如果",     #分词"start_offset": 0,  #开始偏移"end_offset": 2, #结束偏移"type": "CN_WORD", #单词类型"position": 0    #位置},{"token": "缓存","start_offset": 2,"end_offset": 4,"type": "CN_WORD","position": 1},{"token": "中","start_offset": 4,"end_offset": 5,"type": "CN_CHAR","position": 2},{"token": "没有","start_offset": 5,"end_offset": 7,"type": "CN_WORD","position": 3},{"token": "再到","start_offset": 7,"end_offset": 9,"type": "CN_WORD","position": 4},{"token": "mysql","start_offset": 9,"end_offset": 14,"type": "ENGLISH","position": 5}]
      }
      
      • ik_max_work(尽最大可能分词)
  • Kibana出现异常
log   [11:49:18.892] [warning][admin][elasticsearch] No living connectionslog   [11:49:18.894] [warning][admin][elasticsearch] Unable to revive connection: http://node1:9200/log   [11:49:18.894] [warning][admin][elasticsearch] No living connectionserror  [11:49:18.896] [warning][stats-collection] Error: No Living connectionsat sendReqWithConnection (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/transport.js:226:15)at next (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/connection_pool.js:214:7)at _combinedTickCallback (internal/process/next_tick.js:131:7)at process._tickDomainCallback (internal/process/next_tick.js:218:9)log   [11:49:18.897] [warning][stats-collection] Unable to fetch data from kibana collectorerror  [11:49:18.897] [warning][stats-collection] Error: No Living connectionsat sendReqWithConnection (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/transport.js:226:15)at next (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/connection_pool.js:214:7)at _combinedTickCallback (internal/process/next_tick.js:131:7)at process._tickDomainCallback (internal/process/next_tick.js:218:9)log   [11:49:18.899] [warning][stats-collection] Unable to fetch data from canvas collectorerror  [11:49:18.900] [warning][stats-collection] Error: No Living connectionsat sendReqWithConnection (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/transport.js:226:15)at next (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/connection_pool.js:214:7)at _combinedTickCallback (internal/process/next_tick.js:131:7)at process._tickDomainCallback (internal/process/next_tick.js:218:9)log   [11:49:18.902] [warning][stats-collection] Unable to fetch data from kql collectorerror  [11:49:18.909] [warning][stats-collection] Error: No Living connectionsat sendReqWithConnection (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/transport.js:226:15)at next (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/connection_pool.js:214:7)at _combinedTickCallback (internal/process/next_tick.js:131:7)at process._tickDomainCallback (internal/process/next_tick.js:218:9)log   [11:49:18.927] [warning][stats-collection] Unable to fetch data from rollups collectorerror  [11:49:18.928] [warning][stats-collection] Error: No Living connectionsat sendReqWithConnection (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/transport.js:226:15)at next (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/connection_pool.js:214:7)at _combinedTickCallback (internal/process/next_tick.js:131:7)at process._tickDomainCallback (internal/process/next_tick.js:218:9)log   [11:49:18.929] [warning][stats-collection] Unable to fetch data from reporting collectorerror  [11:49:18.929] [warning][stats-collection] Error: No Living connectionsat sendReqWithConnection (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/transport.js:226:15)at next (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/connection_pool.js:214:7)at _combinedTickCallback (internal/process/next_tick.js:131:7)at process._tickDomainCallback (internal/process/next_tick.js:218:9

关闭kibbana

[root@izuf6cn5k7l8xuxojhszqbz es]# ps -ef | grep node
root      4676  4652  0 22:17 pts/1    00:00:00 grep --color=auto node
root      9689     1  0 Jan09 ?        00:03:47 ./../node/bin/node --no-warnings ./../src/cli
[root@izuf6cn5k7l8xuxojhszqbz es]# kill 9689
  • 分词相关性算分

    影响相关度算分的参数:
    1、TF(Term Frequency):词频,即单词在文档中出现的次数,词频越高,相关度越高
    2、Document Frequency(DF):文档词频,即单词出现的文档数
    3、IDF(Inverse Document Frequency):逆向文档词频,与文档词频相反,即1/DF。即单词出现的文档数越少,相关度越高(如果一个单词在文档集出现越少,算为越重要单词)
    4、Field-length Norm:文档越短,相关度越高

5.elasticSearch的集群

  • 集群配置vim elasticSearch.yml
#集群的名称
cluster.name: steven-es
#节点名称,其余两个节点分别为node-2 和node-3
node.name: node-1
#指定该节点是否有资格被选举成为master节点,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master
node.master: true
#允许该节点存储数据(默认开启)
node.data: true
#索引数据的存储路径
path.data: /opt/es/elasticsearch/data/node1
#日志文件的存储路径
path.logs: /opt/es/elasticsearch/log/node1
#设置为true来锁住内存。因为内存交换到磁盘对服务器性能来说是致命的,当jvm开始swapping时es的效率会降低,所以要保证它不swap
bootstrap.memory_lock: true
#绑定的ip地址
network.host: 192.168.100.97
#设置对外服务的http端口,默认为9200
http.port: 9201
# 设置节点间交互的tcp端口,默认是9300
transport.tcp.port: 9301
#Elasticsearch将绑定到可用的环回地址,并将扫描端口9300到9305以尝试连接到运行在同一台服务器上的其他节点。
#这提供了自动集群体验,而无需进行任何配置。数组设置或逗号分隔的设置。每个值的形式应该是host:port或host
#(如果没有设置,port默认设置会transport.profiles.default.port 回落到transport.tcp.port)。
#请注意,IPv6主机必须放在括号内。默认为127.0.0.1, [::1]
#其他两个节点的端口号(不包含自己)
discovery.zen.ping.unicast.hosts: ["192.168.100.97:9302", "192.168.100.97:9303"]
#如果没有这种设置,遭受网络故障的集群就有可能将集群分成两个独立的集群 - 分裂的大脑 - 这将导致数据丢失
discovery.zen.minimum_master_nodes: 2
  • 可能出现问题
    jvm:内存太大

    解决办法:在jvm.options 中调整JVM最大可用内存(Xmx)、初始化内存(Xms)

5.节点、分片、索引

  • 节点
    一个节点就是一个es的服务器,es集群中主节点主要负责集群的管理和任务的分发,一般文档的不负责增删改查
  • 分片
    分片是es的实际物理单元(一个lucene的实例)
  • 索引
    索引是es的物理单元,一个索引建立在不同分片的机器上
  • 复制片
    每个机器的分片一般都会在其他机器上由2~3个复制片(提高数据的容错率)
  • 容错
    一旦集群中的某些机器发生故障,会在其他机器的管理下重新分配资源
  • 分片路由
    • 写操作(新建、删除)只能在主分片上进行,然后将结果同步到复制分片
    • Syn 主分片同步成功后,才返回给客户端
    • Sync 主分片在操作成功后,再复制给同步分片的同时返回给客户端
    • 查询操作可以在主分片或同步分片上都可以

搜索引擎ElasticSearch相关推荐

  1. 搜索引擎 ElasticSearch 之 步步为营2 【基础概念】

    在正式学习 ElasticSearch 之前,首先看一下 ElasticSearch 中的基本概念. 这些概念将在以后的章节中出现多次,所以花15分钟理解一下是非常值得的. 英文好的同学,请直接移步官 ...

  2. 分布式搜索引擎ElasticSearch(四) -- 插件使用

    2019独角兽企业重金招聘Python工程师标准>>> 分布式搜索引擎ElasticSearch(四) -- 插件使用 博客分类: 搜索引擎,爬虫 首先 非常感谢国内大神 - Med ...

  3. 全文搜索引擎 Elasticsearch 入门概念

    基本概念 Node 与 Cluster Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例. 单个 Elastic 实例称为一个节点(nod ...

  4. 全文搜索引擎----ElasticSearch和Solr

    全文搜索引擎 ElasticSearch 还是 Solr? 最近项目组安排了一个任务,项目中用到了全文搜索,基于全文搜索 Solr,但是该 Solr 搜索云项目不稳定,经常查询不出来数据,需要手动全量 ...

  5. 分布式搜索引擎-ElasticSearch(上集)

    个人简介 作者是一个来自河源的大三在校生,以下笔记都是作者自学之路的一些浅薄经验,如有错误请指正,将来会不断的完善笔记,帮助更多的Java爱好者入门. 文章目录 个人简介 分布式搜索引擎-Elasti ...

  6. 全文搜索引擎Elasticsearch,这篇文章给讲透了!(Elasticsearch技术原理及实现方式)

    关于Elasticsearch的技术原理及实现方式看了两篇讲的非常好的文章,在这里分享给大家. 其中一篇是: Elasticsearch 技术分析(九):全文搜索引擎Elasticsearch,这篇文 ...

  7. 搜索引擎 Elasticsearch 的三大坑

    搜索引擎的坑 ES 搜索引擎系列文章汇总: 一.别只会搜日志了,求你懂点原理吧 二.ES 终于可以搜到"悟空哥"了! 三.1W字|40 图|硬核 ES 实战 本文主要内容如下: 搜 ...

  8. 全文搜索引擎Elasticsearch,这篇文章给讲透了

    之前已经分享过Elasticsearch的使用和原理的知识,由于近期在公司内部做了一次分享,所以本篇主要是基于之前的博文的一个总结,希望通过这篇文章能让读者大致了解Elasticsearch是做什么的 ...

  9. 全文搜索引擎 Elasticsearch 简介 及其与 Python 的对接实现

    什么是 Elasticsearch 想查数据就免不了搜索,搜索就离不开搜索引擎,百度.谷歌都是一个非常庞大复杂的搜索引擎,他们几乎索引了互联网上开放的所有网页和数据.然而对于我们自己的业务数据来说,肯 ...

  10. ElasticSearch logo 分布式搜索引擎 ElasticSearch

    原文来自:http://www.oschina.net/p/elasticsearch Elastic Search 是一个基于Lucene构建的开源,分布式,RESTful搜索引擎.设计用于云计算中 ...

最新文章

  1. 一种新的计算机视觉技术?将手机的摄像头变成了一个搜索引擎
  2. Delphi 常用API 函数(好多都没见过)
  3. 判断resultset是否遍历到最后一条记录_干货:一条SQL语句执行得很慢的原因
  4. REALTEK 2.5G PCIE网卡 RTL8125BG-CG支持PXE免驱简介
  5. c++ 一维数组长度_每天一点C / 一维数组和指针
  6. 将ubuntu配置为路由器_“名酒为王”时代来临但资源将尽,看泸州老窖如何进行“名酒资源再配置”丨深度观察...
  7. 蓝桥学院2019算法题2.17
  8. 原版英文书籍《Linux命令行》阅读记录7 | 一些键盘按键技巧
  9. Python批量下载电子邮件附件并汇总合并Excel文件
  10. njx如何实现负载均衡_使用Nginx实现负载均衡
  11. [转]TensorFlow---岂止深度学习
  12. 3.企业安全建设指南(金融行业安全架构与技术实践) --- 安全规划
  13. 解决办法:undefined reference to symbol 'dlclose@@GLIBC_2.2.5'
  14. 怎么用matlab做系统辨识,系统辨识大牛Ljung编写的MATLAB系统辨识使用手册
  15. iir滤波器c语言程序,请教C语言做iir滤波器问题
  16. ITIL系列之变更管理概述及详细流程图
  17. c 语言全局变量的声明及用法,《c语言全局变量的用法》
  18. 计算机术语BOOTP,bootp是什么意思?
  19. mysql 索引原理详解
  20. 6.0 深度学习图片常见转换操作

热门文章

  1. iOS 删除、重新排序xcdatamodel
  2. OpenCV学习笔记(一) 环境配置
  3. 压力测试+webbench+ab+tsung+siege
  4. WCF开发框架形成之旅--WCF应用常见问题处理
  5. 计算机二级python选择题知识点,全国计算机等级考试二级Python练习题库-选择题部分.pdf...
  6. 标定中是什么意思_机械加工中,测头有什么作用呢?
  7. java 微商城开发_Java网上商城系统可以开微信商城吗
  8. 区块链分叉如何解决_什么是分叉区块链又该如何分叉
  9. pythondir什么意思_Python之dir()与__dict__的区别
  10. 甘肃省计算机等级考试在线支付,甘肃计算机等级考试入口