分布式全文检索服务器 --Elasticsearch(1)

写在前面

Elaticsearch, 简称为 es,es 是一个开源的高扩展的分布式全文检索引擎, 它可以近乎实时的存储, 检索数据; 本身扩展性很好, 可以扩展到上百台服务器, 处理 PB 级别的数据. es 也使用 Java 开发并使用 Lucene 作为其核心来实现所有索引和搜索的功能, 但是它的目的是通过简单的 RESTful API 来隐藏 Lucene 的复杂性, 从而让全文搜索变得简单

Elasticsearch 的使用

从官网下载好后, 找到 bin 目录下的

双击, 等待启动. 之后从浏览器访问看到

即证明启动成功了.

Elasticsearch 图形化界面插件 --Elasticsearch-head

从 GitHub 上下载该插件的最新版后, 安装 node.JS 启动该服务, 在浏览器输入 http://localhost:9100 / 即可访问:

Elasticsearch 中的一些核心概念

索引 index

一个索引就是一个拥有几分相似的文档的集合, 类似于数据库的概念.

类型 type

该属性已经在最新版 Elasticsearch 中被抛弃, 只允许_doc 的 type, 不再允许自定义 type

字段 Field

相当于数据库中的表字段.

映射 mapping

其实就是对一些处理数据的方式和规则方面做一些限制, 一些约定俗成的东西.

文档 Docuemnt

文档物理上是存在于一个索引中的, 文档都用 JSON 格式来表示.

集群, 节点, 分片和复制

见图:

集群就是物理上结构, 如图中的三台服务器, 每个服务器都叫一个节点. 每个 index 下有多个分片, 同时分片有复制. 复制主要是为了防止某台服务器出故障后整体服务器还可以继续运行.

通过 PostMan 来使用 Elasticsearch

Elasticsearch 使用了 Restful 的风格, 即通过不同类型的请求来分别处理请求而不写参数. 我们可以通过 postman 来完成一些请求.

创建索引 index 和 mapping

请求使用 JSON 格式字符串:{

"mappings":{
"properties":{
"id":{
"type":"long",
"store":true
},
"title":{
"type":"text",
"store":true,
"index":true,
"analyzer":"standard"
},
"cocntent":{
"type":"text",
"store":true,
"index":true,
"analyzer":"standard"
}
}
}
}

创建索引后设置 mapping

{
"properties":{
"id":{
"type":"long",
"store":true
},
"title":{
"type":"text",
"store":true,
"index":true,
"analyzer":"standard"
},
"cocntent":{
"type":"text",
"store":true,
"index":true,
"analyzer":"standard"
}
}
}

删除 index

写不写参数都可以

创建文档{

"id":1,
"title":"新添加的文档",
"content":"新添加的文档的内容"
}

修改文档

{
"id":1,
"title":"这是一个测试文档",
"content":"这是一段瞎写的内容"
}

修改文档和创建文档基本是一样的, 因为在 Elasticsearch 中修改文档就是先删除后创建

删除文档

根据 id 查询文档

在_doc / 后写上文档的 id 即可.

queryString 查询
{
"query":{
"query_string":{
"default_field":"title",
"query":"修改"
}
}
}
term 查询
{
"query":{
"term":{
"content":"爱"
}
}
}

中文分词插件

从 GitHub 上下载 IK 分词器, 按照教程装好后重启 Elasticsearch.

之后我们在创建索引时指定分词器:{

"mappings":{
"properties":{
"id":{
"store":true,
"type":"long"
},
"title":{
"store":true,
"analyzer":"ik_smart",
"type":"text"
},
"content":{
"store":true,
"analyzer":"ik_smart",
"type":"text"
}
}
}

即可使用中文分词器了.

集群

其实在实际开发中, 很少使用单机. 一般都会使用集群. 这里就不再多讲集群的使用了, 比较复杂, 需要的可以百度搜索一下.

总结

可以看到 Elasticsearch 还是十分复杂的, 不仅是配置还是操作. 接下来会学习一下使用 java 客户端来对其进行操作.