Elasticsearch基本入门

Ealsticsearch进阶笔记

ElasticSearch(ES)


Elasticsearch 是一个实时分布式搜索分析引擎。
github地址

  • 简介
  • 基本概念
  • 应用
  • 其他方面

简介

ES最早由Shay Banon创建[1]并与2010年2月发布和开源,之后迅速的流行开来。
ES中没有一个单独的组件是全新的或者是革命性的。它最主要依赖的一个组件为Apache Lucene(一个独立的jar文件不依赖任何第三方全文检索库)。Lucene有着成熟,高效,轻量,可扩展性等特点。

基本概念

ES是面向文档的,意味着它存储整个对象或文档(JSON对象)。它不仅存储文档(JSON格式),而且索引每个文档的内容使之可以被检索。在ES中,你对文档进行索引、检索、排序和过滤--而不是对行列数据。这是一种完全不同的思考数据的方式,也是 Elasticsearch能支持复杂全文检索的原因-倒排索引。

文档

在 Elasticsearch 中,术语 文档 有着特定的含义。它是指最顶层或者根对象, 这个根对象被序列化成 JSON 并存储到 Elasticsearch 中,指定了唯一 ID。类似数据库中的一条具体的记录。

文档元数据:
一个文档不仅仅包含它的数据 ,也包含元数据 —— 有关 文档的属性信息。 三个必须的元数据属性如下:
_index
文档在哪存放
_type
文档表示的对象类别
_id
文档唯一标识

索引(index)

索引———保存相关数据的地方。 索引实际上是指向一个或者多个物理分片的逻辑命名空间。
相当于数据库中库的概念,需要注意的是ES中的索引可以由若干个Lucene索引构成,具体的细节由ES的shards,replica及其配置决定。

类别(type)

类似数据库中表的概念,但实际使用时可以没有。这允许用户在一个索引中拥有不同的文档类型,不用文档类型可以对应不同的映射。7.x版本中没有type[2]

映射(mapping)

类似表结构,规定了文档中每个字段对应的类型。即使ES能自动根据字段值判断字段类型。

节点(node)


集群(cluster)

集群中有多个节点,其中有一个会被选为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。

分片(shard)

是一个底层的工作单元,它仅保存了全部数据中的一部分。
Elasticsearch 没有采用节点级别的主从复制,而是基于分片。它当前还未提供分片切分(shard-splitting)的机制,只能创建索引的时候静态设置。
Elasticsearch 的分片命中规则。
Elasticsearch 禁止同一个分片的主分片和副本分片在同一个节点上,所以如果是一个节点的集群是不能有副本的。

PUT /index
{
   "settings" : {
      "number_of_shards" : 3,
      "number_of_replicas" : 1
   }
}

副本(replica)

应用

安装

https://blog.csdn.net/sinat_28224453/article/details/51134978

监控(_cat)

_cat用于查看集群当前状态,涉及到shard/node/cluster几个层次

查看集群:curl 'localhost:9200/_cat/health?v'
查看索引:curl 'localhost:9200/_cat/indices?v'
查看节点:curl -s "locahost:9200/_cat/nodes?v"
查看分片:curl -s "locahost:9200/_cat/shards"

更深入的监控

增删改(http rest风格)

Elasticsearch基本入门_第1张图片
cmd-markdown-logo

查询(search)

查询所有文档:curl '192.168.9.138:9200/devtest_doctordetail/_search?q=*&pretty'
查看索引配置:curl '192.168.9.138:9200/devtest_doctordetail?q=*&pretty'//用了哪些分词插件,字段是哪些格式等。
分页查询,下面的例子,做了一次match并且返回第11到第20个文档,降序排序:curl -XPOST '192.168.9.138:9200/devtest_doctordetail/_search?pretty' -d '
        {
          "query": { "match": { "doctorName": "王" } },
          "sort": { "recipeConsultPrice": { "order": "desc" } },
          "from": 10,
          "size": 20
        }'

分词(analyzer)

例子ik结合lc-pinyin分词插件。

其他方面

ES还支持[地理位置(经纬度)查询]](https://www.elastic.co/guide/cn/elasticsearch/guide/current/geoloc.html),事务式更新等等,详见es权威指南。


  1. 许多年前,一个刚结婚的名叫 Shay Banon 的失业开发者,跟着他的妻子去了伦敦,他的妻子在那里学习厨师。 在寻找一个赚钱的工作的时候,为了给他的妻子做一个食谱搜索引擎,他开始使用 Lucene 的一个早期版本。第一个公开版本在2010年2月发布,从此以后,Elasticsearch 已经成为了 Github 上最活跃的项目之一。
    据说,Shay 的妻子还在等着她的食谱搜索引擎… ↩

  2. ES是基于Lucene开发的搜索引擎,而ES中不同type下名称相同的filed最终在Lucene中的处理方式是一样的。举个例子,两个不同type下的两个user_name,在ES同一个索引下其实被认为是同一个filed,你必须在两个不同的type中定义相同的filed映射。否则,不同type中的相同字段名称就会在处理中出现冲突的情况,导致Lucene处理效率下降。去掉type能够使数据存储在独立的index中,这样即使有相同的字段名称也不会出现冲突,就像ElasticSearch出现的第一句话一样“你知道的,为了搜索····”,去掉type就是为了提高ES处理数据的效率。除此之外,在同一个索引的不同type下存储字段数不一样的实体会导致存储中出现稀疏数据,影响Lucene压缩文档的能力,导致ES查询效率的降低。 ↩

你可能感兴趣的:(Elasticsearch基本入门)