自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不忘初心,好好沉淀

后端工程师,前端技术爱好者

  • 博客(29)
  • 收藏
  • 关注

翻译 [Elasticsearch] 索引管理 (四) - 动态映射

动态映射(Dynamic Mapping)当ES在文档中碰到一个以前没见过的字段时,它会利用动态映射来决定该字段的类型,并自动地对该字段添加映射。有时这正是需要的行为,但有时不是。你或许不知道在以后你的文档中会添加哪些字段,但是你想要它们能够被自动地索引。或许你只是想要忽略它们。或者 - 尤其当你将ES当做主要的数据存储使用时 - 大概你会希望这些未知的字段会抛出异常来提醒你注

2014-11-29 11:11:53 21795

原创 [Java 并发] Java并发编程实践 思维导图 - 第六章 任务执行

根据《Java并发编程实践》一书整理的思维导图。希望能够有所帮助。第一部分:第二部分:第三部分:

2014-11-28 09:08:29 5231

翻译 [Elasticsearch] 索引管理 (三) - 根对象(Root Object)

根对象(Root Object)映射的最顶层被称为根对象。它包含了:属性区域(Properties Section),列举了文档中包含的每个字段的映射信息。各种元数据(Metadata)字段,它们都以_开头,比如_type,_id,_source。控制用于新字段的动态探测(Dynamic Detection)的设置,如analyzer,dynamic_date_formats和dy

2014-11-26 10:06:08 9628

翻译 [Elasticsearch] 索引管理 (二)

自定义解析器(Custom Analyzers)虽然ES本身已经提供了一些解析器,但是通过组合字符过滤器(Character Filter),分词器(Tokenizer)以及词条过滤器(Token Filter)来创建你自己的解析器才会显示出其威力。在解析和解析器中,我们提到过解析器(Analyzer)就是将3种功能打包得到的,它会按照下面的顺序执行:字符过滤器(Cha

2014-11-25 10:52:18 11306

翻译 [Elasticsearch] 索引管理 (一)

索引管理本文翻译自Elasticsearch官方指南的索引管理(Index Management)一章我们已经了解了ES是如何在不需要任何复杂的计划和安装就能让我们很容易地开始开发一个新的应用的。但是,用不了多久你就会想要仔细调整索引和搜索过程来更好的适配你的用例。几乎所有的定制都和索引(Index)以及其中的类型(Type)相关。本章我们就来讨论用于管理索引和类型映射的A

2014-11-24 10:04:05 36378

原创 [Java 并发] Java并发编程实践 思维导图 - 第五章 基础构建模块

根据《Java并发编程实践》一书整理的思维导图。希望能够有所帮助。

2014-11-23 10:01:20 4976

原创 Effective JavaScript Item 55 接受配置对象作为函数参数

接受配置对象作为函数参数虽然保持函数接受的参数的顺序很重要,但是当函数能够接受的参数达到一定数量时,也会让用户很头疼:var alert = new Alert(100, 75, 300, 200, "Error", message, "blue", "white", "black", "error", true);随着函数的不断重构和进化,它能

2014-11-21 10:05:06 3839

原创 Effective JavaScript Item 54 将undefined视为"没有值"

将undefined视为"没有值"JavaScript中的undefined是一个特殊的值:当JavaScript没有提供具体的值时,它就会产生undefined。比如:未被赋值的变量的初始值就是undefined访问对象中不存在的属性会得到undefined没有返回值的函数,undefined会作为其返回值函数的参数没有提供时,它的值就是undefined// 情

2014-11-20 10:24:13 3891

翻译 [Elasticsearch] 分布式搜索

分布式搜索本文翻译自Elasticsearch官方指南的Distributed Search Execution一章。在继续之前,我们将绕一段路来谈谈在分布式环境中,搜索是如何执行的。和在分布式文档存储(Distributed Document Store)中讨论的基本CRUD操作相比,这个过程会更加复杂一些。一个CRUD操作会处理一个文档,该文档有唯一的_index,_t

2014-11-19 10:10:37 11235 2

翻译 [Elasticsearch] 分布式文档存储

本文翻译自Elasticsearch官方指南的distributed document store一章。分布式文档存储在上一章中,我们一直在介绍索引数据和获取数据的方法。但是我们省略了很多关于数据是如何在集群中被分布(Distributed)和获取(Fetched)的技术细节。这实际上是有意为之 - 你真的不需要了解数据在ES中是如何被分布的。它能工作就足够了。在本章中,我

2014-11-18 09:53:54 23220 3

翻译 [Elasticsearch] 集群的工作原理 - 第一部分

本文翻译自Elasticsearch官方指南的life inside a cluster一章。ES就是为高可用和可扩展而生的。扩展可以通过购置性能更强的服务器(垂直扩展或者向上扩展,Vertical Scale/Scaling Up),亦或是通过购置更多的服务器(水平扩展或者向外扩展,Horizontal Scale/Scaling Out)来完成。尽管ES能够利用更强劲的

2014-11-17 10:25:25 33655 8

原创 [Java 并发] Java并发编程实践 思维导图 - 第四章 对象的组合

[Java 并发] Java并发编程实践 思维导图 - 第四章 对象的组合。 整理的思维导图,希望对大家有所帮助。

2014-11-16 09:53:12 4929

原创 Effective JavaScript Item 63 注意异步调用中可能会被忽略的异常

异常处理是异步编程的一个难点。在同步的代码中,异常能够很容易地通过try catch语句来完成:try { f(); g(); h();} catch (e) { // handle any error that occurred...}但是在异步代码中,使用一个try代码块将所有可能出现的异常都包括在内是不现实的。实际上,异步API设置不能

2014-11-16 09:22:36 3574

原创 Effective JavaScript Item 62 在异步调用中使用嵌套或者命名的回调函数

在一开始,理解异步程序的调用顺序会有些困难。比如,下面的程序中,starting会先被打印出来,然后才是finished:downloadAsync("file.txt", function(file) { console.log("finished");});console.log("starting");downloadAsync方法在执行之后会立即返回,它只是

2014-11-15 09:40:31 3759

原创 Effective JavaScript Item 61 不要阻塞事件队列

JavaScript处理并发事件的机制是十分友好和强大的,它结合了事件队列(Event Queue)/事件循环并发(Event-loop Concurrency)和一套异步调用API。这因为这一点,JavaScript不仅可以在浏览器环境中运行,还可以在桌面应用和服务器应用中运行,如Node.js。令人奇怪的是,ECMAScript标准时至今日对并发这个问题还是只字未提。所以以下提到的各种

2014-11-14 12:32:12 3864

原创 [Java 并发] Java并发编程实践 思维导图 - 第三章 对象的共享

根据《Java并发编程实践》一书整理的思维导图。

2014-11-13 10:11:22 5704 1

原创 Effective JavaScript Item 51 在类数组对象上重用数组方法

Array.prototype对象上的标准方法被设计为也可以在其它对象上重用 - 即使不是继承自Array的对象。因此,在JavaScript中存折一些类数组对象(Array-like Objects)。一个典型的例子是函数的arguments对象,在Item 22中对它进行过介绍。该对象并不继承自Array.prototype,所以我们不能直接调用arguments.forEach来对其

2014-11-12 16:52:55 3464

原创 Effective JavaScript Item 50 优先使用遍历方法而非循环

优先使用遍历方法而非循环在使用循环的时候,很容易违反DRY(Don't Repeat Yourself)原则。这是因为我们通常会选择复制粘贴的方法来避免手写一段段的循环语句。但是这样做回让代码中出现大量重复代码,开发人员也在没有意义地"重复造轮子"。更重要的是,在复制粘贴的时候很容易忽视循环中的那些细节,比如起始索引值,终止判断条件等。比如以下的for循环就存在这个问题,假设n是集

2014-11-12 10:06:18 3633

原创 Effective JavaScript Item 49 对于数组遍历,优先使用for循环,而不是for..in循环

本系列作为Effective JavaScript的读书笔记。 对于下面这段代码,能看出最后的平均数是多少吗?var scores = [98, 74, 85, 77, 93, 100, 89];var total = 0;for (var score in scores) { total += score;}var mean = total / scores.len

2014-11-11 09:49:38 3610

原创 Effective JavaScript Item 47 绝不要向Object.prototype中添加可列举的(Enumerable)属性

本系列作为Effective JavaScript的读书笔记。 如果你的代码中依赖于for..in循环来遍历Object类型中的属性的话,不要向Object.prototype中添加任何可列举的属性。 但是在对JavaScript执行环境进行增强的时候,往往都需要向Object.prototype对象添加新的属性或者方法。比如可以添加一个方法用于得到某个对象中的所有的属性名:

2014-11-10 10:02:07 4067

原创 [Java 并发] Java并发编程实践 思维导图 - 第二章 线程安全性

根据《Java并发编程实践》一书整理的思维导图。

2014-11-09 11:25:08 5324

原创 [Java 并发] Java并发编程实践 思维导图 - 第一章 简介

根据《Java并发编程实践》一书

2014-11-08 10:08:27 5003 1

原创 [Java 8] (11) 使用Lambda的原则

要想更好的使用函数式编程,仅仅熟悉其语法结构是远远不够的。必须从思想和设计层面,去考虑它,去接纳它。这种编程范式和大多数开发人员所熟知的面向对象编程范式是不同的。下面我们从以下几个方面来回顾一下使用函数式编程的要点:多用声明式,少用命令式要想更好的使用函数式编程,首先必须要提升代码的抽象程度。之所以使用函数式编程在完成同样任务时需要的代码量比命令式要少,很大程度上就是源于函

2014-11-07 10:16:39 5828 1

原创 [Java 8] (10) 使用Lambda完成函数组合,Map-Reduce以及并行化

Java 8中同时存在面向对象编程(OOP)和函数式编程(FP, Functional Programming)这两种编程范式。实际上,这两种范式并不矛盾,只是着重点不同。在OOP中,着重于通过丰富的类型系统对需要解决的问题进行建模;而FP中则着重于通过高阶函数和Lambda表达式来完成计算。所以我们完全可以将这两者融合在一起,对问题提出更加优雅的解决方案。在这篇文章中,会介绍如何通过函数

2014-11-06 10:09:44 36689 3

原创 [Hibernate Search] (6) 高级查询 - 过滤,投影和分面

高级查询在介绍了更多的高级映射功能之后,是时候回顾一下之前介绍过的查询功能了,看看如何借助这些高级的映射功能来使用一些高级的查询功能。本文会通过以下几个方面进行介绍:如何在不和数据库进行任何交互的前提下,借助Lucene的力量来动态的筛选结果如何通过使用基于投影(Projection)的查询来获取需要的属性,从而避免与数据库的交互如何使用分面搜索(Faceted Search)对搜

2014-11-05 10:13:43 13157 1

原创 [Hibernate Search] (5) 解析和条件索引

解析(Analysis)当一个实体域被Lucene索引时,往往还会经历一个语法分析(Parsing)和转换(Conversion)的步骤,这些步骤被称为解析。在前文中,我们提到过Hibernate Search会默认对字符串类型的实体域进行分词,而这个分词过程就需要用到解析器(Analyzer)。在需要对实体域进行排序的场合,需要禁用这个默认的分词行为。在解析过程中,还可以借助Ap

2014-11-04 09:52:35 7735

原创 [Hibernate Search] (4) 实体类型的高级映射功能

高级映射前面介绍的可搜索的域基本上都是字符串类型,实际上可搜索的类型是非常丰富的。本文会介绍以下几个方面的内容:Lucene对实体进行索引的过程借助Solr组件对这个过程的改进修改域的重要程度,从而让基于相关度的排序更加有意义动态决定是否对一个实体类型进行索引桥接器(Bridges)实体类型中可以使用的类型是无穷无尽的,但是对于Lucene索引而言,任何类型

2014-11-03 10:16:20 8000

原创 [Hibernate Search] (3) 基础查询

基础查询目前我们只用到了基于关键字的查询,实际上Hibenrate Search DSL还提供了其它的查询方式,下面我们就来一探究竟。映射API和查询API对于映射API,我们可以通过使用Hibernate提供的注解来完成映射工作,同时我们也可以使用JPA提供的注解来完成。类似的,对于查询API,我们也可以从Hibernate和JPA提供的查询API中进行选择。每种方式都有

2014-11-02 11:30:37 13854 9

原创 [Hibernate Search] (2) 实体类型的映射

实体类型映射在上一篇文章中,简要介绍了如何使用Hibernate Search来对一个实体进行全文搜索。然而,在真实的应用中,实体与实体之间的关系也许更为复杂。为了对复杂实体进行搜索,就需要让底层的Lucene查询也能够理解这些关系。下图反映了Database,Hibernate,Hibernate Search和Lucene之间的关系:

2014-11-01 09:31:23 9123

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除