elasticsearch (三) 索引管理

创建索引

之前我们简单的通过添加一个文档的方式创建了一个索引。这个索引使用默认设置,新的属性通过动态映射添加到分类中。现在我们需要手动创建索引,在请求中加入所有设置和类型映射。

事实上,你可以通过在 config/elasticsearch.yml 中添加下面的配置来防止自动创建索引。

以下为创建索引的格式:


索引设置

提示: Elasticsearch 提供了优化好的默认配置。除非你明白这些配置的行为和为什么要这么做,请不要修改这些配置。

下面是两个最重要的设置:

number_of_shards
定义一个索引的主分片个数,默认值是 5。这个配置在索引创建后不能修改。

number_of_replicas
每个主分片的复制分片个数,默认是 1。这个配置可以随时在活跃的索引上修改。

例如,我们可以创建只有一个主分片,没有复制分片的小索引。

然后,我们可以用 update-index-settings API 动态修改复制分片个数:


配置分析器

analysis是用来配置已存在的分析器或创建自定义分析器来定制化你的索引。

standard 分析器是用于全文字段的默认分析器,对于大部分西方语系来说是一个不错的选择。它考虑了以下几点:

  • standard 分词器,在词层级上分割输入的文本。
  • standard 表征过滤器,被设计用来整理分词器触发的所有表征(但是目前什么都没做)。
  • lowercase 表征过滤器,将所有表征转换为小写。
  • stop 表征过滤器,删除所有可能会造成搜索歧义的停用词,如 atheandis

默认情况下,停用词过滤器是被禁用的。如需启用它,你可以通过创建一个基于 standard 分析器的自定义分析器,并且设置 stopwords 参数。可以提供一个停用词列表,或者使用一个特定语言的预定停用词列表。

在下面的例子中,我们创建了一个新的分析器,叫做 es_std,并使用预定义的西语停用词:

es_std 分析器不是全局的,它仅仅存在于我们定义的 spanish_docs 索引中。为了用 analyze API 来测试它,我们需要使用特定的索引名。

以下是返回结果,停用词 El 被正确的删除了


自定义分析器

虽然 Elasticsearch 内置了一系列的分析器,但是真正的强大之处在于定制你自己的分析器。你可以通过在配置文件中组合字符过滤器,分词器和表征过滤器,来满足特定数据的需求。

字符过滤器

字符过滤器是让字符串在被分词前变得更加“整洁”。例如,如果我们的文本是 HTML 格式,它可能会包含一些我们不想被索引的 HTML 标签,诸如 <p> 或 <div>。

我们可以使用 html_strip 字符过滤器 来删除所有的 HTML 标签,并且将 HTML 实体转换成对应的 Unicode 字符,比如将 & Aacute ; 转成 Á。

一个分析器可能包含零到多个字符过滤器。

elasticsearch (二) 入门

让我们建立一个员工目录


创建数据

假设我们刚好在Megacorp工作,这时人力资源部门出于某种目的需要让我们创建一个员工目录,这个目录用于促进人文关怀和用于实时协同工作,所以它有以下不同的需求:

  • 数据能够包含多个值的标签、数字和纯文本。
  • 检索任何员工的所有信息。
  • 支持结构化搜索,例如查找30岁以上的员工。
  • 支持简单的全文搜索和更复杂的短语(phrase)搜索
  • 高亮搜索结果中的关键字
  • 能够利用图表管理分析这些数据

首先创建一个员工

系统返回结果

这个文档是employee类型,属于megacorp索引。如果说之前elasticsearch中没有employee类型或者megacorp索引的话,系统会自动创建。 并且上面插入数据的时候指定了_id为1,所以插入数据后,这个文档的_id就是为1。假设不指定_id的话,系统会默认设置一个_id。如下,

PS: 上面两次操作中,一次使用了PUT,一次使用了POST,区别就是PUT是修改,必须制定_id,如果elasticsearch中不存在的话会进行插入操作,类似mysql中的replace intoPOST的话就是正常的插入操作。

当我们插入一条数据的时候,系统返回中有_index_type_id_version前三个上文已说过,接下来说下_version

Elasticsearch中每个文档都有版本号,每当文档变化(包括删除)都会使_version增加。在《版本控制》章节中我们将探讨如何使用_version号确保你程序的一部分不会覆盖掉另一部分所做的更改。


检索文档

输入命令

返回结果

命令中主要逻辑为_index/_type/_id进行查找,参数pretty的作用是美化输出结果。

返回结果中,found的记过为boolean,表示是否成功。_source表示我们所查的具体文档。

如果是查询不到内容的话_found字段的值为false,如下

我们也可以指定返回文档中的一部分

当然也可以只返回_source


创建一个新文档

请记住_index_type_id三者唯一确定一个文档。所以要想保证文档是新加入的,最简单的方式是使用POST方法让Elasticsearch自动生成唯一_id

然而,如果想使用自定义的_id,我们必须告诉Elasticsearch应该在_index_type_id三者都不同时才接受请求。为了做到这点有两种方法,它们其实做的是同一件事情。你可以选择适合自己的方式:

第一种方法使用op_type查询参数:

或者第二种方法是在URL后加/_create做为端点:

如果包含相同的_index_type_id的文档已经存在,Elasticsearch将返回409 Conflict响应状态码,错误信息类似如下:


更新整个文档

系统返回的数据中_version进行了自增。created等于false表示这次操作不是创建。

其实文档在Elasticsearch中是不可变的——我们不能修改他们。在内部,Elasticsearch已经标记旧文档为删除并添加了一个完整的新文档。旧版本文档不会立即消失,但你也不能去访问它。Elasticsearch会在你继续索引更多数据时清理被删除的文档。


文档局部更新

其实局部更新与整体更新一样。Elasticsearch内部都是这个过程如下:

  1. 从旧文档中检索JSON
  2. 修改它
  3. 删除旧文档
  4. 索引新文档

删除文档

删除文档的语法模式与之前基本一致,只不过要使用DELETE方法:

elasticsearch (一) 初识

一、 elasticsearch是什么

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
—— 引用自百度百科

简而概之就是一个非常牛逼的搜索引擎。

二、相关概念

  1. 集群(cluster) & 节点(node)
    一个集群是有一个或多个节点组成,节点是集群中的一个服务器。节点会存储数据,参与集群的索引和搜索。默认情况下,节点会获取一个随机的名字来作为标识。与节点类似,集群也会默认获取一个名字,一般情况下这个名字为elasticsearch

  2. 索引(index) & 类型(type) & 文档(document) & 字段(field)

和关系型数据库类似,elasticsearch中也有类似库表行字段的含义。大致关系如下:

解释:

Elasticsearch集群可以包含多个索引(indices)(数据库),每一个索引可以包含多个类型(types)(表),每一个类型包含多个文档(documents)(行),然后每个文档包含多个字段(Fields)(列)。

三、安装

  1. 安装elasticsearch

官网下载最新版。

下载之后解压即可。无需安装使用方便。

  1. 安装Marvel

MarvelElasticsearch的管理和监控工具,在开发环境下免费使用。它包含了一个叫做Sense的交互式控制台,使用户方便的通过浏览器直接与Elasticsearch进行交互。

Marvel是一个插件,可在Elasticsearch目录中运行以下命令来下载和安装:

你可能想要禁用监控,你可以通过以下命令关闭Marvel:

四、运行

Elasticsearch已经准备就绪,执行以下命令可在前台启动:

如果想在后台以守护进程模式运行,添加-d参数。

打开另一个终端进行测试:

你能看到以下返回信息:

这说明你的ELasticsearch集群已经启动并且正常运行,接下来我们可以开始各种实验了。

linux下安装最新版本Java

Ubuntu

1、 Installing default JRE/JDK

2、 Installing Oracle JDK

3、 Managing Java

4、 Setting the “JAVA_HOME” environment variable

如果你因为防火墙或者其他原因,导致installer 下载速度很慢,可以中断操作.然后下载好相应jdk的tar.gz 包,放在:

下面,然后安装一次installer. installer 则会默认使用 你下载的tar.gz