ElasticSearch之TermQuery和MatchQuery ElasticSearch之TermQuery和MatchQuery一、TermQuery1.验证Term查询2.Term特殊用法3.跳过算分二、MatchQuery1.验证Match查询2.Operator提高精准度3.minimum_should_match提高精准度4.Match Query的查询过程三、小结在日常使用ES的时候,经常会将TermQuery和MatchQuery混淆,不知道该使用什么查询。本文举例说明。一、TermQueryTerm是表达语意的最小单位。搜索和利用统计语言模型进行
ElasticSearch之基本概念小结 ElasticSearch之基本概念总结一、产品及适用场景二、基本概念三、搜索和聚合四、DOC和Index一、产品及适用场景ElasticSearch是一个开源的分布式搜索与分析引擎,提供了近实时搜索和聚合两大功能。Elastic Stack包括ElasticSearch,Kibana,Logstash,Beats等产品ElasticSearch是核心引擎,提供了海量数据存储,搜索和聚合能力Beats是轻量的数据采集器Logstash用来做数据转换Kibana提供了可视化ElasticSt
ElasticSearch之聚合简介Bucket和Metric ElasticSearch之聚合Bucket和Metrix简介一、聚合(Aggregation)二、聚合的分类三、Bucket和Mertrix1.Bucket示例2.Metrix示例3.嵌套4.stats一、聚合(Aggregation)ES除了提供搜索以外,还提供了针对ES数据进行统计分析的功能实时性高Hadoop统计分析功能时效性为(T+1)通过聚合,我们会得到一个数据的概览,是分析和总结全套数据,而不是寻找某个文档性能高,只需要一条语句,就能从ElasticSearch中得到分析结
ElasticSearch之处理深度分页 ElasticSearch之处理深度分页一、常规分页二、scroll分页三、search_after在ES中实现分页的方法有三种,我们逐个分析一下他们的优缺点。一、常规分页在ES中,我们可以给查询条件加from和size达到分页的效果,比如:get test_index/_doc/_search{ "query":{ "match_all":{} }, "from":1000, "size":3}但是这种使用方式效率是非常低的,比如上面那条语句,意味着ES要在每个分片
Elasticsearch之Template详解 Elasticsearch之Template详解一、Index Template示例1示例2示例3二、Dynamic Template示例1在ES中我们可以通过设置Index Template和Dynamic Template来更好的为我们管理和设置索引和mapping。一、Index Template比如一个我们需要使用ES来做日志管理,我们都知道日志的数据量是十分庞大的,如果使用单个索引来保存所有日志数据的话,可能会存在一些性能问题。我们可以通过按天或月来自动生成index,这时候我们就可以用到I
Elasticsearch之Mapping设置详解 Elasticsearch之Mapping详解什么是Mapping?字段的数据类型Dynamic MappingES类型自动识别机制更新mapping定义Mapping1.控制字段是否被索引2.索引配置3.Null Value4.copy to5.数组什么是Mapping?Mapping类似于数据库中的表定义,主要有以下几个作用:定义索引中字段的名称定义字段的数据类型,例如:字符串、数字…倒排索引的相关配置,是否分词,字段分词器选择等Mapping设置会把JSON文档映射成Lucence所
Elaseacsearch之Search的基本API Search APIURL Search:在url中使用查询参数来进行数据查询Reqeust Body Search:使用ES提供的基于JSON格式的查询操作。Query Domain Specific Language(DSL)基本API:/_search:查询集群上的所有索引/index1/_search:查询范围为index1/index1,index2/_search:查询范围为index1和index24./index*/_search:查询范围为index开头的索引URI
Elasticsearch之Analyzer分词器介绍 AnalysisAnalysis文本分析,也叫分词,是把全文本转换为一系列单词的过程。Analyzer叫做分词器。Analysis是通过Analyzer来实现的,ES当中内置了很多分词器,同时我们也可以按需定制化分词器。分词器的作用,除了在数据写入时对需要分词的字段进行词条切分转换,同时匹配Query语句的时候也需要使用相同的分词器对查询语句进行分析。例如:Elasticsearch is fun这个文本就会被分词器切分成,elasticsaerch、is、fun三个单词。Analyzer的组成
Elasticsearch之倒排索引 正排索引和倒排索引比如我们现在有两个文档,id分别是1、2、31:Elasticsearch is fun2:I am learning Elasticsearch3:Elasticsearch is powerful我们常说的正排索引就是根据文档的id,去查找到文档的内容。比如我们使用的关系型数据库,通常都会给表设立一个主键,根据主键来找到数据。倒排索引是什么呢?将上述三个文档构建成倒排索引,结构如下:TermCountDocumentId:PositionElast
ElasticSearch之Document的基本API Elasticsearch之基本API一、文档的CRUD1.index2.Create3.Read4.update5.deleteBulk API批量插入批量查询一、文档的CRUDType名,约定都用_doc1.index如果ID不存在,创建新的文档。否则先删除现有的文档,再创建新的文档,文档的版本会增加。支持自动生成文档id和指定文档id两种方式示例:// 首先我们创建一个文档put index/_doc/1{ "user":"程大帅", "comment":"ES真好玩"}
ElasticSearch之节点、集群、分片和副本 分布式系统高可用:服务的可用性,有部分节点停止服务时,可正常提供工作。数据的可用性,部分节点丢失,不会丢失数据可扩展:请求量提升/数据不断增长(将数据分布到所有节点上),实现水平扩展分布式特性ES分布式架构的好处:存储的水平扩容,提高扩展能力提高系统的可用性,部分节点停止服务,整个集群的服务不受影响ES的分布式架构:不同的集群通过不同的名字来区分,默认名字为"elasticsearch"通过配置文件修改,或者在命令行中-E cluster.name=xxx进行设定一个集群可以有一个
ElasticSearch之文档、索引和基本API 什么是数据建模?数据建模是创建数据模型的过程。数据模型是对真实世界进行抽象描述的一种工具和方法,实现对像是世界的映射。三个过程:概念模型 - 逻辑模型 - 数据模型(遵循第三范式)数据模型:结合具体的数据库,在满足业务读写性能等需求的前提下,确定最终定义。如何对字段进行建模?字段类型 - 是否需要搜索及分词 - 是否需要聚合及排序 - 是否需要额外的存储字段类型Text用于全文本字段,文本会被Analyzer分词默认不支持聚合分析及排序。需要设置fielddata为true
ElasticSearch之索引(index)和mapping 创建索引使用put命令可以创建索引,并指定索引的分片数和副本数。PUT 索引名{ "settings": { "index": { "number_of_shards": "8", // 分片数量 "number_of_replicas": "0" // 副本数量 } }}修改索引副本修改索引副本数量PUT /索引名/_settings{ "number_of_replicas": 1 // 副本数量}删除索引delete 索引名
Java并发编程之指令重排序 在我们面试过程中,通常避免不了会被问到什么是指令重排序?本文就这个问题进行探索。重排序前言一、重排序种类二、happens-before三、重排序1.数据依赖性2. as-if-serial语义3.程序顺序规则4.重排序在多线程中的影响前言在执行程序时,为了提高性能,编译器和处理器常常会对指令做重排序。一、重排序种类在java语言中,重排序分为3种。编译器优化的重排序。编译器在不改变单线程程序的语义前提下,可以重新安排语句的执行顺序。指令级并行的重排序。现在处理器采用了指令集并行技术,
Java并发编程之volatile可见及非原子特性 特性可见性:对一个volatile的读,总能看到对这个volatile变量的最后写入原子性:对于一个bolatile变量的单个读/写操作具有原子性,但类似于voliatile++这种复合操作不具有原子性验证原子性public class VolatileThread extends Thread { // 1.能够保证可见 当一个线程在修改我们主内存共享变量的数据 对另外一个线程可见 private volatile static boolean flag = true;
设计模式回顾之责任链模式 介绍责任链模式是将每一个节点看作一个对象,每个节点处理的请求均不同,且节点内部维护下一个节点对象。当请求进来时,从首端进入,沿着链的路径依次传递给每一个节点对象,直到有对象处理这个请求位置。责任链模式主要是解耦了请求与处理,客户只需要将请求发送到链上即可,无需关心请求的具体内容和处理细节,请求会自动进行传递直至有节点对象进行处理。适用场景:多个对象可以处理同一个请求,但是具体由哪个对象处理则在运行时决定。在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。可动态指定一组对象处理请求。
设计模式回顾之策略模式 介绍策略模式可以解决在又多种算法相似的情况下,使用if...else或’switch…case’所带来的复杂性和臃肿性,策略模式适用于以下场景:针对统一类型问题,多种处理方式,每一种都能解决特定的场景。算法需要自由切换场景。需要屏蔽算法规则的场景。策略模式中几个重要的角色:抽象策略,具体策略,上下文。抽象策略:规定策略或算法行为接口。具体策略:具体的策略算法实现。上下文角色:用来操作策略的上下文环境,屏蔽高层模块策略,算法直接访问,封装可能存在变化。实战在saas系统中,通常需
设计模式回顾之原型模式 原型模式原型模式(Prototype Pattern)是指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象,属于 创建型模式 。原型模式的核心在于拷贝原型对象。以系统中已存在的一个对象为原型,直接基于内存二进制流进行拷贝,无需再经理耗时的对象初始化过程(不需要调用构造函数),性能提升许多。当对象的都见过程比较耗时时,可以利用当前系统中已存在的对象作为原型,对其克隆(基于二进制流的复制),躲避初始化过程,使得新对象的创建时间大大减少。反射对象准备/** * @author chen