摘要: 因为只要索引处于open状态,就会占用内存+磁盘; 如果将索引close,只会占用磁盘 Curl -XPOST ‘hadoop01:9200/index/_close’ 在es中删除文档,数据不会马上在硬盘上删除,而是在es索引中产生一个.del 文件; 并且es在检索过程中也会把.del文件进行检 阅读全文
posted @ 2017-05-22 23:54 niutao 阅读(4729) 评论(0) 推荐(0) 编辑
摘要: Es是基于lucene构建的搜索引擎;lucene查询的快是因为倒排索引; Es中经常会看到segments_q这样的文件,那么这个文件就是一个lucene的倒排索引; 倒排索引是由**词典 (Term Dictionary)和文档列表(Postings List)组成,lucene会在词典上做一层 阅读全文
posted @ 2017-05-22 23:53 niutao 阅读(717) 评论(0) 推荐(0) 编辑
摘要: 适当的提升分片数量可以提升建立索引的速度; 一般情况下:一个索引库建立5-20个分片是最合适的; 注意:如果分片过少或者过多,都会降低检索的速度 分片数过多会导致: 分片数太少导致: 单个分片索引过大,降低整体的检索速率 建议: 将单个分片存储存储索引数据的大小控制在20G左右;绝对不要超过50G 阅读全文
posted @ 2017-05-22 23:50 niutao 阅读(6772) 评论(0) 推荐(0) 编辑
摘要: 多副本可以提升检索的能力,但是如果副本数量太多,插入数据的时候容易出现卡顿现象; 因为主分片要把数据同步给所有的副本,所以建议副本数量最好是1-2个; Es在索引数据的时候,如果存在副本,那么主分片会将数据同时同步到副本; 如果当前插入大量数据,那么会对es集群造成一定的压力,所以在插入大量数据前, 阅读全文
posted @ 2017-05-22 23:50 niutao 阅读(4047) 评论(0) 推荐(1) 编辑
摘要: 1、将最小堆大小(Xms)和最大堆大小(Xmx)设置为彼此相等 防止内存抖动 2:给多大的堆内存? 给ES的内存配置不是越大越好,建议不能超过32GB,不同jdk版本最大边界值是不同的,对于32位小于32G JVM才采用内存对象指针压缩技术,不然对象指针需要占用很大的内存; 一旦你越过那个神奇的30 阅读全文
posted @ 2017-05-22 23:49 niutao 阅读(4397) 评论(0) 推荐(0) 编辑
摘要: 在实际的生产中,如果要插入大批量数据的时候需要使用多个索引库,如果我们还是手工指定每个索引的配置信息settings和mappings,是非常耗时的; 针对这种情况,es有index template可以解决上面的问题; 索引可使用预定义的模板进行创建,这个模板称作Index templates。模 阅读全文
posted @ 2017-05-22 23:48 niutao 阅读(624) 评论(0) 推荐(0) 编辑
摘要: 3.1、分片查询方式 当前的图片中有5个主分片,5个副本;这对于es的集群来说,这种配置是非常常见的; 但是问题来了,当我们的客户端做查询的时候,程序会向主分片发送请求还是副本发送请求? 还是说直接去集群上随机找一台机器查询,还是在这个机器里面在随机的找到分片和副本查询? 【注意】: 默认情况下是随 阅读全文
posted @ 2017-05-22 23:47 niutao 阅读(1057) 评论(0) 推荐(0) 编辑
摘要: 一个正常es集群中只有一个主节点,主节点负责管理整个集群,集群的所有节点都会选择同一个节点作为主节点;所以无论访问那个节点都可以查看集群的状态信息。 而脑裂问题的出现就是因为从节点在选择主节点上出现分歧导致一个集群出现多个主节点从而使集群分裂,使得集群处于异常状态 这样的脑裂状态直接让节点失去了集群 阅读全文
posted @ 2017-05-22 23:47 niutao 阅读(1168) 评论(0) 推荐(0) 编辑
摘要: 1:需求: 解决海量数据的存储,并且能够实现海量数据的秒级查询 Hbase是典型的nosql,是一种构建在HDFS之上的分布式、面向列的存储系统,在需要的时候可以进行实时的大规模数据集的读写操作;但是hbase的语法非常固话,即便在hbase之上嫁接了phoneix在应对复杂查询的时候,仍然力不从心 阅读全文
posted @ 2017-05-22 23:44 niutao 阅读(4353) 评论(1) 推荐(0) 编辑
摘要: 构建数据: 1:分组求count 计算每个球队的球员数量: select team, count(*) as player_count from player group by team; 2:Group by 多个字段 计算每个球队每个位置的球员数 select team, position, c 阅读全文
posted @ 2017-05-22 23:36 niutao 阅读(563) 评论(0) 推荐(0) 编辑
摘要: 我们已经介绍了如何使用不同的条件查询来构建查询并搜索数据。我们还熟知了评分,它告诉我们在给定的查询中,哪些文档更重要以及查询文本如何影响排序。然而,有时我们可能要在不影响最后分数的情况下,选择索引中的某个子集,这就要使用过滤器。 如果可以,应该尽可能使用过滤器。过滤器不影响评分,而得分计算让搜索变得 阅读全文
posted @ 2017-05-22 23:35 niutao 阅读(1705) 评论(0) 推荐(1) 编辑
摘要: 随着应用程序的增长,提高搜索质量的需求也进一步增大。我们把它叫做搜索体验。我们需要知道什么对用户更重要,关注用户如何使用搜索功能。这导致不同的结论,例如,有些文档比其他的更重要,或特定查询需强调一个字段而弱化其他字段。这就是可以用到加权的地方。 进一步说搜索体验,我们更希望检索出来的数据是最想得到的 阅读全文
posted @ 2017-05-22 23:34 niutao 阅读(3974) 评论(0) 推荐(0) 编辑
摘要: 代码实现: 编写Article实体类: 阅读全文
posted @ 2017-05-22 23:32 niutao 阅读(1068) 评论(0) 推荐(0) 编辑
摘要: 按照一般的查询流程来说,如果我想查询前10条数据: · 1 客户端请求发给某个节点 · 2 节点转发给个个分片,查询每个分片上的前10条 · 3 结果返回给节点,整合数据,提取前10条 · 4 返回给请求客户端 那么当我想要查询第10条到第20条的数据该怎么办呢?这个时候就用到分页查询了。 浅分页可 阅读全文
posted @ 2017-05-22 23:30 niutao 阅读(8151) 评论(3) 推荐(1) 编辑
摘要: 插入样例数据: 插入样例数据: 1:查询所有 matchAllQuery()匹配所有文件 match_all查询是Elasticsearch中最简单的查询之一。它使我们能够匹配索引中的所有文件。 2:解析查询字符串 相比其他可用的查询,query_string查询支持全部的Apache Lucene 阅读全文
posted @ 2017-05-22 23:29 niutao 阅读(29113) 评论(0) 推荐(0) 编辑
摘要: 1.7.1: 创建索引 默认创建好索引,mappings为空 1.7.2: 删除索引 1.7.3:索引的映射操作 为什么要进行手动的映射? 如果你习惯SQL数据库,或许知道,在存入数据前,需要创建模式来描述数据(schmal);尽管elasticsearch是一个无模式的搜索引擎,可以即时算出数据结 阅读全文
posted @ 2017-05-22 23:26 niutao 阅读(5171) 评论(1) 推荐(1) 编辑
摘要: 删除文档操作 2:通过查询的方式删除 往往生产的需求是能够类似mysql一样,通过查询出符合条件的数据进行删除: 比如mysql: 那么es也是支持这种操作的:DeleteByQueryAction允许检索一个索引,把匹配出来的字段删除 3: 优化-通过查询进行删除 上面的查询删除,在实际的生产中会 阅读全文
posted @ 2017-05-22 23:22 niutao 阅读(3996) 评论(0) 推荐(1) 编辑
摘要: 之前的更新文档操作 1:方式1 2:方式2 3:方式3 阅读全文
posted @ 2017-05-22 23:19 niutao 阅读(504) 评论(0) 推荐(0) 编辑
摘要: 1:搜索文档数据(单个索引) 2:搜索文档数据(多个索引) 阅读全文
posted @ 2017-05-22 23:17 niutao 阅读(654) 评论(0) 推荐(0) 编辑
摘要: 插入文档操作的一种优化,因为每次插入单条文档,都会向es中发送请求。然后es执行在返回结果; 如果有大批量的文档数据需要插入,这个时候单挑插入操作显然是不合理的; 之前学习的命令行批量执行方式: 1:普通的批量插入方式 这种方式也会有问题,比如在批量插入的时候,多大数据量插入一次,多少条插入一次,多 阅读全文
posted @ 2017-05-22 23:16 niutao 阅读(12809) 评论(0) 推荐(0) 编辑
摘要: 4方式: 1: 使用JSON字符串创建 2:使用Map集合 3:使用第三方库来序列化 4:使用内置的帮助器jsonBuilder() 去elasticsearch的head页面查看: 阅读全文
posted @ 2017-05-22 23:14 niutao 阅读(4122) 评论(0) 推荐(0) 编辑
摘要: Elasticsearch 的 Java 客户端非常强大;它可以建立一个嵌入式实例并在必要时运行管理任务。 运行一个 Java 应用程序和 Elasticsearch 时,有两种操作模式可供使用。该应用程序可在 Elasticsearch 集群中扮演更加主动或更加被动的角色。在更加主动的情况下(称为 阅读全文
posted @ 2017-05-22 23:11 niutao 阅读(4436) 评论(1) 推荐(0) 编辑
摘要: 1、 下载tomcat,作为远程词库的容器 , 需要在tomcat中配置词库 2、测试tomcat启动后,是否能够访问 3、 更改ik的配置:IKAnalyzer.cfg.xml 4、 更新hot.dic之后会发现es中输出如下信息: 阅读全文
posted @ 2017-05-22 23:08 niutao 阅读(2426) 评论(0) 推荐(0) 编辑
摘要: Es集群内部是有一个约定是用来约束我们的写操作的,就是“一致性”; 也就是说:新建、索引、删除这些操作都是写操作,他们都有一个大前提: 当前的分片副本处于活跃状态的数量 >= int( (primary + number_of_replicas) / 2 ) + 1 比如当前的副本有3个副本,那么规 阅读全文
posted @ 2017-05-22 23:08 niutao 阅读(1455) 评论(0) 推荐(1) 编辑
摘要: 1:默认的分析器-- standard 使用默认的分词器 这就是默认的分词器,但是默认的分析器有时候在生产环境会出现问题,比如: curl -XPUT 'http://hadoop01:9200/test/class/1' -d '{"title" : "我爱中国"}' 去hadoop01:9100 阅读全文
posted @ 2017-05-22 23:06 niutao 阅读(1218) 评论(0) 推荐(0) 编辑
摘要: Elasticsearch这种全文搜索引擎,会用某种算法对建立的文档进行分析,从文档中提取出有效信息(Token) 对于es来说,有内置的分析器(Analyzer)和分词器(Tokenizer) 1:分析器 ES内置分析器 测试simple Analyzer: custom(自定义)分析器接受以下的 阅读全文
posted @ 2017-05-22 22:59 niutao 阅读(3000) 评论(0) 推荐(0) 编辑
摘要: 在检索出数据之后,我们观察有一个_source这样的字段, 【注意】_source字段在我们检索时非常重要; Es除了将数据保存在倒排索引中,另外还有一分原始文档 原始文档就是存储在_source中的; 其实我们在elasticsearch中搜索文档,查看文档的内容就是_source中的内容 我们可 阅读全文
posted @ 2017-05-22 22:57 niutao 阅读(3441) 评论(0) 推荐(0) 编辑
摘要: ES的聚合: metric很像SQL中的avg、max、min等方法,而bucket就有点类似group by 导入数据汽车销售数据: 1:Bucket 1.1:按时间统计(date_histogram时间直方图聚合) date_histogram是专门用来给时间格式的数据进行聚合的 时间字段sol 阅读全文
posted @ 2017-05-22 22:54 niutao 阅读(563) 评论(0) 推荐(0) 编辑
摘要: Elasticsearch 的功能之一就是搜索,搜索主要分为两种类型,结构化搜索和全文搜索。结构化搜索是指有关查询那些具有内在结构数据的过程。比如日期、时间和数字都是结构化的:它们有精确的格式,我们可以对这些格式进行逻辑操作。比较常见的操作包括比较数字或时间的范围,或判定两个值的大小。 导入学习数据 阅读全文
posted @ 2017-05-22 22:49 niutao 阅读(924) 评论(0) 推荐(0) 编辑
摘要: 导入测试数据: 1:size+from浅分页 按照一般的查询流程来说,如果我想查询前10条数据: · 1 客户端请求发给某个节点 · 2 节点转发给个个分片,查询每个分片上的前10条 · 3 结果返回给节点,整合数据,提取前10条 · 4 返回给请求客户端 那么当我想要查询第10条到第20条的数据该 阅读全文
posted @ 2017-05-22 22:48 niutao 阅读(1375) 评论(0) 推荐(0) 编辑
摘要: 1:一条数据是如何落地到对应的shard上的 当索引一个文档的时候,文档会被存储到一个主分片中。 Elasticsearch 如何知道一个文档应该存放到哪个分片中呢? 首先这肯定不会是随机的,否则将来要获取文档的时候我们就不知道从何处寻找了。实际上,这个过程是根据下面这个算法决定的: routing 阅读全文
posted @ 2017-05-22 22:46 niutao 阅读(2012) 评论(0) 推荐(0) 编辑
摘要: 1:索引(创建或者删除)一个文档 首先:发送一个索引或者删除的请求给node1 其次:node1接收到请求之后,会根据请求中携带的参数“文档id”判断出该文档应该存储在具体哪一个shard中 shard = hash(routing) % number_of_primary_shards ,比如sh 阅读全文
posted @ 2017-05-22 22:43 niutao 阅读(3007) 评论(0) 推荐(0) 编辑
摘要: 1:批量查询操作 1):插入测试数据 Elasticsearch是分布式的,在查询的时候不可避免的要夸网络,如果大量的单独的请求,会造成很大的网络延迟和开销; ES的查询方式: 2):批量查询 如果索引相同的话,可以简写: 如果类型也相同的话,可以直接简写成: 2:批量执行(bulk) 与 mget 阅读全文
posted @ 2017-05-22 22:40 niutao 阅读(1906) 评论(0) 推荐(0) 编辑
摘要: 1:乐观锁控制 ES是分布式的,也是异步并发的,我们的复制请求是并行发送的;这就意味着请求到达目的地的顺序是不可控制的,是乱序的; 如果是乱序的方式,很有可能出现这样的一个问题,新version的文档被旧version的文档覆盖掉—-数据丢失,或者直接抛异常; 所以在分布式异步并发场景中,需要一种方 阅读全文
posted @ 2017-05-22 22:37 niutao 阅读(6906) 评论(0) 推荐(0) 编辑
摘要: 5.7.1:更新整个文档 ES中并不存在所谓的更新操作,而是用新文档替换旧文档; 在内部,Elasticsearch已经标记旧文档为删除并添加了一个完整的新文档并建立索引。旧版本文档不会立即消失 ,但你也不能去访问它 5.7.2:局部更新[partial _update] 上面介绍的是更新整个文档, 阅读全文
posted @ 2017-05-22 22:28 niutao 阅读(7496) 评论(1) 推荐(0) 编辑
摘要: 实际生产,对于文档的操作,偶尔会遇到这种问题: 某一个字段的类型不符合后期的业务了,但是当前的索引已经创建了,我们知道es在字段的mapping建立后就不可再次修改mapping的值 比如: 1): 2): 当前的times是text类型,但是后期想使用时间去检索数据是不可能的了,那么在实际的生产中 阅读全文
posted @ 2017-05-22 22:27 niutao 阅读(706) 评论(0) 推荐(1) 编辑
摘要: 1:增加别名 为索引school添加一个别名alias1: 1.1:创建索引 1.2:添加别名 2:查询别名 查询某个index下的别名: 3:删除别名 4:修改别名 es没有修改别名的操作,只能先删除后添加 阅读全文
posted @ 2017-05-22 22:26 niutao 阅读(17885) 评论(0) 推荐(0) 编辑
摘要: 1:索引的映射管理 elasticsearch中的文档等价于java中的对象 , 那么在java对象中有字段(比如string、int、long等); 同理在elasticsearch索引中的具体字段也是有类型的; 第一步:默认的插入操作: 这种操作并没有指定字段类型,那么elasticsearch 阅读全文
posted @ 2017-05-22 22:24 niutao 阅读(1506) 评论(0) 推荐(0) 编辑
摘要: 1:创建索引 创建索引的时候可以通过number_of_shards和number_of_replicas来指定当前索引的分片和副本数量; 可以通过检索当前集群的索引是否存在(head)来判断当前索引是否插入成功 返回值为200表示存在,404表示不存在 2:删除索引 删除索引可以通过指定索引的名称 阅读全文
posted @ 2017-05-22 22:22 niutao 阅读(2930) 评论(0) 推荐(0) 编辑
摘要: Kibana 是一个开源的分析和可视化平台,旨在与 Elasticsearch 合作。Kibana 提供搜索、查看和与存储在 Elasticsearch 索引中的数据进行交互的功能。开发者或运维人员可以轻松地执行高级数据分析,并在各种图表、表格和地图中可视化数据。(注意,既然是可视化的平台,因此只需 阅读全文
posted @ 2017-05-22 22:18 niutao 阅读(247) 评论(0) 推荐(0) 编辑