ElasticSearch的入门(一)

ElasticSearch的基础入门

ElasticSearch是什么

  • 基于Apache Lucene构建的开源搜索引擎node

  • 采用Java编写,提供了简单易用的RESTFul API数据库

  • 轻松的横向拓展,可支持PB级的结构化和非结构化的数据处理数据结构

使用场景

  • 海量数据分析引擎curl

  • 站内搜索引擎jvm

  • 数据仓库搜索引擎

与ElasticSearch交互

与Elaticsearch交互取决因而否使用Java Java API Elasticsearch为Java用户提供了两种内置客户端url

节点客户端

节点客户端以无数据节点(none data node)身份加入集群,它本身不存储任何数据,可是它知道数据在集群中的具体位置,而且可以直接妆发请求到对应的节点间上。spa

传输客户端

更轻量的传输客户端可以发生请求到远程集群。它本身不加入集群,只是简单转发请求给集群中的节点。3d

节点客户端和传输客户端都是经过9300端口与集群交互的,使用Elasticsearch传输协议。集群中的节点之间也是经过9300端口进行通讯的。若是这个端口没有开放,你的节点将没法组成集群。代理

注意:

Java客户端所在的Elasticsearch版本必须与集群中其余节点一致,不然,它们可能互相 没法识别。

基于HTTP协议,以JSON数据格式的RESTful API的交互方式

其余的全部成勋语言均可以i使用RESTful API,经过9200端口与Elasticsearch进行通讯,可使用WEB客户端,甚至可使用curl命令与Elasticsearch通讯

向Elasticsearch发出的请求的组成部分与其它普通的HTTP请求是同样的:

curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'
复制代码
  • VERB HTTP方法: GET , POST , PUT , HEAD , DELETE

  • PROTOCOL http或者https协议(只有在Elasticsearch前面有https代理的时候可用)

  • HOST Elasticsearch集群中的任何一个节点的主机名,若是是在本地的节点,那么就叫 localhos

  • PORT Elasticsearch HTTP服务所在的端口,默认为9200

  • PATH API路径(例如_count将返回集群中文档的数量),PATH能够包含多个组件,例如 _cluster/stats或者_nodes/stats/jvm

  • QUERY_STRING 一些可选的查询请求参数,例如 ?pretty 参数将使请求返回更加美观 易读的JSON数据

  • BODY 一个JSON格式的请求主体(若是请求须要的话)

Elasticsearch的存储的概念

与传统的数据库的存储方式不一样,Elasticsearch是基于文档存储数据的,之前一个对象以一条记录存储在数据库里面,如今是以JSON的方式进行文档存储,使得存储操做变得更加方便简单。在Elasticsearch中,文档属于一种类型(type),而这些类型存在全部(index)中,关系能够用下面的方式类比:

Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices -> Types -> Documents -> Fields
复制代码

索引的含义和区分

索引在Elasticsearch有不一样的含义,因此须要区分它

  • 索引(名词)如上文所述,一个索引(index)就像是传统关系型数据库中的数据库,它是相关文档的存储的地方,index的附属是indices或indexes.

  • 索引(动词)[索引一个文档]标识一个文档存储到索引(名词)里,以便它能够被检索或者查询。这很像SQL中的INSERT关键字,差异是,若是翁当已经存在,新的文档将覆盖就的文档

  • 倒排索引:传统数据库为特定列增长一个索引,例如B-Tree索引来加速索引。Elasticsearch和Lucene使用一种叫作倒排索引的(inverted index)的数据结构来表达到相同的目的。

全文检索

传统的数据库很难实现该功能,可是在Elasticsearch却能够轻易的实现全文的检索。

例如:

GET /_search
{
  "query": {
    "match": {
      "about": "rock climbing"
    }
  }
}
复制代码

返回以下结果:

这个例子返回了两个结果,可是这两个结果的分数是分高低的,第一个的分数显然高于第二个的。这个例子也解释了Elasticsearch在文本字段中进行了全文的检索,而且返回相关性嘴袋的结果集。相关性在Elasticsearch在很是重要,这个概念也是体现了传统数据库和Elasticsearch的区别。

短语搜索

除了上面的全文检索,咱们有时候也须要精确的匹配若干的单词或者短语,这个时候Es也是能够作到的。

GET /_search
{
  "query": {
    "match_phrase": {
      "about": "rock climbing"
    }
  }
}
复制代码

返回结果以下:

高亮搜索

高亮匹配到关键字,这样用户能够知道Wie上面这些文档和查询相匹配。在Elasticsearch作到这个是很简单的,只须要在语句中添加highlight参数。

GET /_search
{
  "query": {
    "match_phrase": {
      "about": "rock climbing"
    }
  },
  "highlight": {
    "fields": {
      "about":{}
    }
  }
}
复制代码

返回的结果以下:

数据分析

Elasticsearch有一个功能叫作聚合(aggresgation),容许在生产复杂的分析统计,它的功能项传统数据库的GROUP BY,可是比传统的数据库的GROUP BY要强大不少。

GET megacorp/employee/_search
{
  "aggs": {
    "all_interests": {
      "terms": {
      #这里须要注意的是若是根据某个字段统计须要在后面添加keyword关键字
        "field": "interests.keyword"
      }
    }
  }
}
复制代码
相关文章
相关标签/搜索