热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

跟我学ElasticSearch入门篇

跟我学Ela



一、ElasticSearch简介

1.1、ElasticSearch简介

Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。但是,Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RESTful API 来隐藏Lucene的复杂性,从而让全文搜索变得简单。

1.2、同类产品比较solr

Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化 。并自带了图形管理界面。

数据相对少的请求下Solr的检索效率更高

数据量大时,Solr的搜索效率变低,而ElasticSearch没有明显变化

建立索引时,Solr会产生阻塞IO,查询性能较差,ElasticSearch有优势

安装使用方面ElasticSearch更为简单

总结solr查询快,但更新索引时慢(即插入删除慢),用于电商等查询多的应用,比如商品搜索 。

ES建立索引快(即查询慢),即实时性查询快,适用用于数据频繁更新的应用,比如facebook新浪等搜索。

Solr 是传统搜索应用的有力解决方案,但 Elasticsearch 更适用于新兴的实时搜索应用。

ES没有Solr成熟,学习成本相对较高。

二、 ElasticSearch安装和插件

2.1、ElasticSearch安装

下载Es安装包

ElasticSearch的官方地址:https://www.elastic.co/guide/en/elasticsearch/reference/master/index.html

2.2、ES图形化管理界面安装

1)下载head https://github.com/mobz/elasticsearch-head

2) 下载Node.js https://nodejs.org/en/download

安装完成 在cmd窗口执行node -v查看node.js的版本号 检查是否安装成功

3) 安装grunt

通过node.js的包管理器npm安装grunt为全局命令,grunt是基于Node.js的项目构建工具

npm install-g grunt-cli

4)执行 npm install (不执行该命令 使用grunt server命令会报错)

npm install

如有执行该命令报错的 在elasticsearch-head解压目录下执行

5)elasticsearch-head解压目录下打开命窗口

执行 grunt server 启动服务

访问http://localhost:9100 (elasticsearch-head服务端口)

6、配置ElasticSearch跨域访问 修改 config/elasticsearch.yml 文件

  1. http.cors.enabled: true

  2. http.cors.allow-origin: "*"

需要重启ES服务

7、在head页面输入链接的ElasticSearch地址,点击连接按钮

三、 ElasticSearch的相关概念

3.1 概述

Elasticsearch是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(ducoment)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之能搜索。在Elasticsearch中,你可以对文档(而非成行成列的数据 )进行索引、排序、过滤。Elasticsearch比传统关系型数据库如下。

  1. 关系型数据库 -> Databases -> Tables -> Rows -> Colums


  2. ElasticSearch -> Indices -> Types ->Documents -> Fields

3.2 ElasticSearch的核心概念

3.2.1 索引 index

一个索引就是有相似特征的文档集合,比如用户数据索引、订单数据索引、商品数据索引。

一个索引由一个全为小写字母的名字标识,我们在对应这个索引文档中进行索引、搜索、更新和删除的时候,都要使用到这个名字。在一个群集中可以定义任意多个索引。

3.2.2 类型type

在一个索引中,你可以定义一个或多个类型,一个类型是你的索引的一个逻辑上的分类,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型,比如说,我们订单数据索引中我们把订单信息作为一个类型,订单相关的物流信息做为一个类型。但在6.0开始建议index只包含一个type,在7.0之后开始去除。

3.2.3 字段field

相当于是数据表的字段,对文档根据不同的属性进行的分类标识

3.2.4 映射 mapping (表结构)

mapping是处理数据的方式和规则方面做一些限制,如某个字段的数据类型、默认值、分析器、是否被索引等等,这些都是映射里面可以设置的,其他的就是处理es里面的数据的一些使用规则设置也叫做映射,按最优规则处理数据对性能提高很大,因此才需要建立映射,并且需要思考如何建立隐射才能对性能更好。

3.2.5 文档 document

一个文档是一个可被索引的基础单元。文档以JSON格式来表示,而JSON是一个到处存在的互联网数据交互格式。

在一个index/type里面,你可以存储任意多的文档。

3.2.6 ElasticSearch版本问题说明

Elasticsearch 官网提出的近期版本对 type 概念的演变情况如下:

5.X 版本中,一个 index 下可以创建多个 type;

6.X 版本中,一个 index 下只能存在一个 type;

7.X 版本中,直接去除了 type的概念,就是说 index 不再会有 type。

去除type的原因 :

因为 Elasticsearch 设计初期,是直接参考了关系型数据库的设计模式,存在了 type(数据表)的概念。但是,其搜索引擎是基于 Lucene的,这种 “基因”决定了 type 是多余的。Lucene 的全文检索功能之所以快,是因为 倒序索引** 的存在。而这种倒序索引 的生成是基于 index 的,而并非 type。





推荐阅读
author-avatar
violalal_134
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有