ElastaticSearch入门

1.优点 :

①简化 Luence API的复杂操作

②轻松横向扩展 (支持集群,需要多少个es查询器,就配置几个节点即可,node.name: xxx,....)

③其实就是 集合 : 全文检索,数据分析,分布式部署 为一体 就形成了 ES。

应用场景 : 全文检索,复杂数据分析,同义词处理,相关度排名,海量数据的近实时处理。

启动步骤:

①先cmd去到head 目录, grunt server ,启动head插件

②直接.bat启动 elastaticSearch 服务

2.elasticSearch.yml 在设置参数的时候,后边一定要有空格!

cluster.name: kaven-test #设置集群的名称

node.name: master #当前elasticSearch节点的名称

network.host: xxx #监听的地址 host

http.port: 9200 #端口

对于集群里的子ES,一定要配上以下配置,否则找不到指挥官master 。

#增加新的参数,这样head插件就可以访问 es

http.cors.enabled: true

http.cors.allow-origin: "*"

ES的基本概念 :

Index (索引),即mysql中的数据库,index必须小写。

Type(逻辑分组),即数据库中的表

Document(文档)【JSON 格式】,即数据库中的行

Node(节点),Cluster(集群),一个集群由一个唯一的名字标识 。 一个集群下的多个节点,通过 这个集群的唯一标识来加入集群。

切记 : systemctl status firewalld [确保 firewalld是关闭]  与  chkconfig iptables off  [确保 iptables 是关闭]

elasticsearch.yml 配置 :

network.host:  0.0.0.0 #  指定哪些IP 可以访问es ,【0.0.0.0表示任何ip都可以访问】 【只有设置了 network.host ,程序里 才能直接用9300来连接 ES 】

cluster.name :KAVEN-CLUSTER    # 集群名称 ,同个集群中所有节点node,集群名称必须相同

node.name : node1 # 每个节点都有各自唯一的 node 名称

【

http.cors.enabled: true

http.cors.allow-origin: "*"

】 #设置跨域访问

3.增删改查 操作 :

创建索引:

增:ip:9200/index/type/1 (PUT) 【指定ID 插入数据】

jsonBody

ip:9200/index/type (POST)【系统生成ID插入数据】

改 :ip:9200/index/type/id  (POST)

doc(修改的内容) :

删除索引:

简单查询 :ip:9200/index/type/id    (GET)

带条件查询(POST):

http://ip:9200/index/type/_search

-- 查询所有,从一条开始,只查两条数据

{

"query":{

"match_all":{}

},

"from":1,

"size":2

}

排序查找关键字 :

-- 精确匹配

解释 :author字段必须是完全匹配 kaven 才会显示出来

term : term的意思就是过滤条件 ,查询条件 ,而且是文档中必须包含整个搜索的词汇。

term 与 match的区别在于 :

term 【精确查询】 :不采用分词器查询。

match 【模糊查询】:采用分词器 查询。

比如:查询“我的宝马多少速度”,term 就会直接以整个"我的宝马多少速度"去文档中寻找匹配。而 match 会使用分词器,将该串分为"我的" , "宝马","多少","速度" ,去文档中寻找是否有与这四个词其一匹配的 ,有一个匹配,该数据就会显示。

{

"query":{

"term":{

"author" : "kaven"

}

}

}

-- 关键词 模糊 查询 (POST):

注意 : 匹配的时候,会分为两个词:ElasticSearch,入门,凡是有这个两个词的都会显示出来。

{

"query":{

"match":{

"title" : "ElasticSearch入门"

}

}

}

-- 排序 查询 ,按 publish_date  降序排序(POST):

{

"query":{

"match":{

"title" : "ElasticSearch"

}

},

"sort":[

{"publish_date":{"order" : "desc"}}

]

}

-- 聚合查询 (POST):

分组 :

解释 :  group_by_word_count-> 分组聚合的名称  , world_count,publish_date ->以该这两个字段 分别 分组

{

    "aggs":{

        "group_by_country":{

            "terms":{

                "field":"country"

            }

        }

    }

}

统计:

可以统计出 最大最小值等信息

{

"aggs" : {

"grades_by_word_count":{

"stats":{

"filed" :"world_count"

}

}

}

}

-- 高级查询 :

子条件查询 :

精确整个词 (总体来说是模糊搜索)匹配:(也就是说要所有词都包括,而且按顺序) 【可以查出 yes , you are find me completely !】

{

"query":{

"match_phrase":{

"title" : "find me completely"

}

},

"from":1,

"size":2

}

多字段 的【精确】匹配查询 :

解释: 字段:author 或者  title 只要有一个 包含有 Man词 ,就会显示出来

{

"query":{

"multi_match": {

        "query":                "kaven",

      "fields":              [ "author", "title" ]

    }

}

}

查询所有字段  , 可匹配 多个词 查询 :

解释: 任何字段  只要包含 ElasticSearch 或者Python 的 都会显示出来

{

"query":{

"query_string":{

"query" : "(ElasticSearch) OR (Python) "

}

}

}

查询指定字段  , 可匹配 多个词 查询 :

解释: 字段 title 和 name 包含 ElasticSearch 或者Python 的 都会显示出来

{

"query":{

"query_string":{

"query" : "(ElasticSearch) OR (Python) ",

"field" : ["title" , "name"]

}

}

}

范围查询 :

查找字段 read_count ,范围是 大于等于1000,小于等于2000的数据

{

"query":{

"range" :{

"read_count":{

"gte": 1000,

"lte" : 2000

}

}

}

}

---Filter Context :

filter 相比于 query :

①filter 相对于 query 会比较快一些,因为第一次查询的结果会进行缓存。

②filter 只查询出结果,但是query不仅查询出结果,还会计算出 相关度。

解释 : 查询 字段word_count 为1000 的 数据,

term : 完全匹配

{

"query" : {

"bool" : {

"filter" : {

"term" : {

"word_count" : 1000

}

}

}

}

}

--复合条件查询:

-- 固定分数查询:

解释 :查询出来的结果 ,分数_score都是 固定为 2

{

"query":{

"constant_score" :{

"filter":{

"match":{

"title" : "ElasticSearch"

}

},

"boost" : 2

}

}

}

-- 布尔 查询 (联合查询):

should 查询 :

解释 :也称为或查询,只要 author 包含kaven 或者 title 包含book,就会显示。

{

"query":{

"bool" :{

"should":[

{

"match" :{

"author" :"kaven"

}

},

{

"match" :{

"title" :"book"

}

}

]

}

}

}

-- must查询 :

解释 :也称为 与查询,只要 author 包含kaven 而且  title 包含book,就会显示。

{

"query":{

"bool" :{

"must":[

{

"match" :{

"author" :"kaven"

}

},

{

"match" :{

"title" :"book"

}

}

]

}

}

}

-- 过滤 + must 查询:

解释 :字段 author 必须包含kaven 且 title 必须包含book,且过滤剩下word_count 为 1000的 数据。

{

"query":{

"bool" :{

"must":[

{

"match" :{

"author" :"kaven"

}

},

{

"match" :{

"title" :"book"

}

}

],

"filter":[

{

"term" :{

"word_count":1000

}

}

]

}

}

}

must_not查询 :

查询 author 不是 kaven的数据

{

"query":{

"bool" :{

"must_not":{

"term":{

"author":"kaven"

}

}

}

}

}

--- 用java实现ES功能的时候(BUG: None of the configured)

切记 除了集群名,端口号外,还有就是必须得是5.x以上的版本,2.x就有这个问题!!!

--- ElastaticSearch 与 mysql 实现同步 :

使用第三方插件:go-mysql-elasticsearch

配置:

主要配置好,Mysql的连接,es的连接即可。

原理 :

如果是第一次启动该程序,首先会使用mysqldump 对 源mysql 数据库 进行一次全量同步,通过 es client 执行写入数据到ES。然后实现了 一个 Mysql client,作为 slave 数据库 连接到 源 数据库(master)。之后如果有对源数据库进行改动,master数据库会通过binlog event 同步给 slave 数据库,binlog event获取到改动的内容 写入ES。

中文分词器 :IKAnalyzer

简历 带分词器 的索引

analyzer: 分词器  【ik_max_word  是最细粒度分词】

search_analyzer: 分词规则

ElasticSearch 集群 :

一。ElasticSearch的数据存储机制 - 分片备份 Shard【分片就是对数据切分成多个部分】。 正因为分片的存在,集群上的某台机子宕机了,其他的机器也可以访问该机器的数据。

分片 : ES 上的索引 就是分片存储的,ES默认会把一个索引分出 5 片 ,数据保存在分片内,片数是可以自定义的。 当ES 的集群扩大或缩小的时候,各个节点会进行 分片的 迁移,这样就让各个节点都能访问到所有的数据。

副本 :副本就是对原分片的复制,和原分片的内容是一样的。这时,需要将某个分片的副本存在其他的机器上,这样这台机宕机了, 也可以在 其他机器上找到对应的副本数据。

一般来说,Elasticsearch 会尽量把一个索引的不同分片存储在不同的主机上,分片的副本也尽可能存在不同的主机上,这样可以提高容错率,从而提高高可用性。

健康状态 :Elasticsearch 衡量 索引 有三种健康状态

绿色: 代表所有的主分片 和 副本 都已经分配, 集群100%可用。

黄色 : 所有的主分片 已经分配了,但至少还有一个副本是缺失的。

红色 :至少一个主分片以及它的全部副本都在缺失中。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Elastic+logstash+head简单介绍 一. 概述 ElasticSearch是一个基于Lucene的...
    柒月失凄阅读 4,802评论 0赞 4
  • 欢迎访问我的博客查看原文:http://wangnan.tech 注:文本整理自《ELKstack权威指南》 目录...
    GhostStories阅读 10,984评论 0赞 7
  • ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RE...
    EarthChen阅读 660评论 0赞 3
  • * ES集群会在生产环境被长期实践, 一些重要概念, 包括应用和优化调试方法值得记录分享 * 所以, 会有关于ES...
    君剑阅读 2,531评论 0赞 0
  • Elasticsearch基本操作 查看集群信息 命令行curl或者浏览器查看es集群节点信息 curlhttp:...
    neo_ng阅读 1,229评论 0赞 2

友情链接更多精彩内容