ElasticSearch学习日志(一)

Stella981
• 阅读 491

        搜索程序一般由索引链和搜索组件组成。

        索引链主要是先检索原始内容,再根据原始内容来创建对应的文档,并对创建的文档进行索引;

        搜索组件用于接收用户的查询请求并响应结果,一般由用户接口、构建可编程查询语句的方法、查询语句执行引擎及结果展示组件组成。

 一、ES的基本概念

          索引(Index)

        ES 将数据存储于一个或多个索引中,索引是具有类似特性的文档的集合。同传统数据库对比来看,索引相当于SQL中的一个“数据库”,并通过引用此名称完成文档的创建、搜索、更新及删除操作。一个ES集群中可以按需创建任意数据的索引。

        类型(Type)

        类型是索引内部的逻辑分区(category/partition),就是为拥有相同的域的文档做的预定义,因此一个索引内部可定义一个或多个类型。例如,在索引中,可以定义一个用于存储用户数据的类型,一个存储日志数据的类型,以及一个存储评论数据的类型。类比传统库,类型相当于“表”。

        文档(Document)

        文档是Lucence索引和搜索的原子单位,它是包含了一个或多个域的容器,基于JSON格式进行表示。文档由一个多个域组成,每个域拥有一个名字及一个或多个值,有多个值的域通常称为“多值域”。每个文档可以存储不同的域集,但同一类型下的文档在结构上有某种程度上的相似之处,类比传统库,文档相当于“记录”,可以拥有多条记录。

        映射(Mapping)

        ES中,所有的文档在存储之前都要首先进行分析。用户可根据需要定义如何将文本分割成token、哪些token应该被过滤掉,以及哪些文本需要进行额外处理等等。另外,ES还提供了额外功能,例如将域中的内容按需排序。事实上,ES也能自动根据其值确定域的类型。

        节点(Node)

        运行了单个实例的ES主机称为节点,它是集群的一个成员,可以存储数据、参与集群索引及搜索操作。类似于集群,节点靠其名称进行标识,默认为启动时自动生成的随机marvel字符串名称--注(marvel是ES的管理可监控工具,“随机marvel字符串名称”有点疑问)。用户可以按需要自定义任何希望使用的名称,但是出于管理的目的,此名称应该被设置成较好的识别性。节点通过为其配置的ES集群名称确定其所要加入的集群。

        分片(Shard)和副本(Replica)

        ES的“分片(shard)”机制可将一个索引内部的数据分布地存储于多个节点,它通过将一个索引切分为多个底层物理的Lucene索引完成索引数据的分割存储功能,每一个物理的Lucene索引成为一个分片(shard)。每个分片其内部都是一个全功能且独立的索引,因此可由集群中的任何主机存储。创建索引时,用户可指定其分片的数量,默认数量为5个。

        Shard有两种类型:primary和replica,即主shard及副本shard。primary shard用于文档存储,每个新的索引会自动创建5个primary shard,当然此数量可在索引创建之前通过配置自行定义,不过,一旦创建完成,其primary shard的数量将不可更改。replica shard是primary shard的副本,用于冗余数据集提高搜索性能。每个primary shard默认配置一个replica shard,但也可以配置多个,且其数量可动态更改。ES会根据需要自动增加或减少replica shard的数量。

 二、安装elasticsearch

        https://www.elastic.co/downloads/elasticsearch 下载5.4.3版本。解压运行es前,必须安装jdk1.8+。

        在linux下运行es,会遇到root权限的问题。

        ElasticSearch学习日志(一)

        两种解决方式:

        1、创建新用户,由于安全问题,es不允许root用户直接运行,要创建新用户;

            adduser es_user

            passwd xxxxx

            chown -hR es_user /usr/local/src/es/elasticsearch-5.4.3

            su es_user 后 cd至es目录./bin/elasticsearch

        ElasticSearch学习日志(一)

             至此es成功启动。

             如果报错如下:

        ElasticSearch学习日志(一)

            需修改sysctl的配置,vim /etc/sysctl.conf

            添加vm.max_map_count = 262144,然后生效配置文件 sudo /etc/sysctl.conf -p

            对于第一个错误max file,见如下截图

        ElasticSearch学习日志(一)

            正常启动的情况下,输入curl 'http://***:9200/' 会出现如下结果

        ElasticSearch学习日志(一)

            2、修改es的属性,以支持root启动

            2.1)在执行es时加上参数-Des.insecure.allow.root=true(网上推荐)

         ElasticSearch学习日志(一)

            注:这种方式有错误,提供D不是有效的属性

            2.2)ES_JAVA_OPTS="-Des.insecure.allow.root=true"   修改elasticsearch执行文件(网上推荐)

            注:这种方式依然不奏效

            https://discuss.elastic.co/t/elasticsearch-5-1-1-cannot-run-as-root-user/70304/7 

            似乎从5.0+的版本后es不再允许root运行应用,只能采用第一种方式,创建新用户。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
添砖java的啾 添砖java的啾
2年前
distinct效率更高还是group by效率更高?
目录00结论01distinct的使用02groupby的使用03distinct和groupby原理04推荐groupby的原因00结论先说大致的结论(完整结论在文末):在语义相同,有索引的情况下groupby和distinct都能使用索引,效率相同。在语义相同,无索引的情况下:distinct效率高于groupby。原因是di
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
mysql5.6 分页查询优化
mysql5.6分页查询优化场景:表结构:主键(非自增)contentCode(varchar),过滤条件列为updateTime(timeStamp),已经为timestamp建立索引。搜索sql为:SELECTFROMmy_hello_tableWHEREupdat
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Stella981 Stella981
2年前
ELK学习笔记之ElasticSearch的索引详解
0x00ElasticSearch的索引和MySQL的索引方式对比Elasticsearch是通过Lucene的倒排索引技术实现比关系型数据库更快的过滤。特别是它对多条件的过滤支持非常好,比如年龄在18和30之间,性别为女性这样的组合查询。倒排索引很多地方都有介绍,但是其比关系型
Wesley13 Wesley13
2年前
mysql组合索引与字段顺序
很多时候,我们在mysql中创建了索引,但是某些查询还是很慢,根本就没有使用到索引!一般来说,可能是某些字段没有创建索引,或者是组合索引中字段的顺序与查询语句中字段的顺序不符。看下面的例子:假设有一张订单表(orders),包含order\_id和product\_id二个字段。一共有31条数据。符合下面语句的数据有5条。执行下面的s
Python进阶者 Python进阶者
2个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这