Elasticsearch基本知识和操作

1.1Lucene倒排索引:

搜索引擎的关键就是建立倒排索引结构。
假设有两篇文章1和文章2
文章1内容:Tom lives in Guangzhou, I live in Guangzhou,too
文章2内容:He once live in Shanghai
1.对内容进行处理,取得关键词
文章1所有关键词: [tom][live][guangzhou][i][live][guangzhou]
文章2所有关键词:[he][live][Shanghai]
2.建立倒排索引
之前的对应关系是:“文章号”对应“文章中所有关键词”
倒排索引把这个关系倒过来 :“关键词”对应“拥有该关键词的所有文章号”
仅知道关键词在文章中出现还不够,我们还需要知道关键词在文章中的出现次数和位置(字符位置(是文章中的第几个字符) or 关键词位置(是文章中的第几个关键词))

这样就像一个字典

1.2基础知识

文本(一段普通的非结构化文字),经过分析(依赖分词器,将文本转化成索引词),转化成索引词(一个能够被索引到的精确值,foo、Foo、FOO几个是不同的索引词)
集群cluster有一个或多个节点组成,对外提供索引和搜索功能。一个集群的默认名字为“Elasticsearch”,一个节点只能加入一个集群,当节点被设置成相同集群名称时,就会自动加入该集群。你可以建立多个独立集群,但每个集群都有不同的名称。

节点node
一个节点是一个逻辑上独立的服务,可以存储数据,参与集群的索引和搜索功能。节点会在启动时默认被分配一个节点名,也可以自己为它定义。你可以为一个节点配置加入某个特定集群,默认情况下会加入名为Elasticsearch的集群中。
路由routing
存储一个文档时,他会存储在唯一的主分片中,具体在哪个分片根据文档的ID生成。
分片shard
索引index是指向主分片和副分片的逻辑空间。我们使用时只需要指定分片数量。
为什么需要分片?答:一个索引可以存储很大的数据,可以超过一个节点的物理存储限制,一台物理机器代表的以恶搞节点不一定能存储这么多数据,为了解决这个问题,Elasticsearch将索引分解成多个分片,当你创建一个索引时定义你需要的分片数量。每个分片是一个全功能的独立单元,可以托管在集群的任何节点。
主分片primary shard
当你存储一个文档时,它会首先存储在主分片中,然后复制倒不同的副本中,默认一个索引有5个主分片。你可以事先定制分片数量,分片一旦建立,数量不能更改。
副本分片 replica shard
每一个分片有0个或多个副本,当主分片失败时,可以从副本分片中选择一个作为主分片,查询时也可以到主分片或者副本分片中查询(副本分片和主分片必须部署在不同节点上)
默认情况下,每个索引有5个主分片,每个主分片有一个副本,故集群中至少有两个节点,你将拥有5个主分片,5个副本分片。
注意:一个索引的文档存储数量为2147283519。
索引index
索引时具有相同结构的文档集合。比如一个客户信息索引,一个产品目录索引,i 个订单数据索引。一个集群中可以定义多个索引。
类型type
在一个索引中,可以定义一个或多个类型,类型是索引的逻辑分区,通常一种类型并定义为具有一组公共字段的文档,即一个type下面的document都有相同的field。
文档document
文档是存储在ES中的一个JSON格式字符串,呢个文档都是一个JSON(键值对)对象。
字段field
一个文档中包含0个或多个字段。
主键ID
ID是一个文档的唯一标识,如果存库时没有提供ID,系统会自动生成,文档的index/type/id 是唯一的

注意:在ES6.0中删除了每个索引index具有多个映射类型type的功能。一个index中只能有一个type。 这是计划中完全删除地图类型的第一步。 在5.x中创建的索引将继续支持多种映射类型。

1.3JSON

JSON的两种结构
1.名称/值对的集合,用花括号将这些值进行关联

{
    "model": "myapp.person",
    "pk": 1,
    "fields": {
      "first_name": "John",
      "last_name": "Lennon"
    }
  }

2.值的有序集合,即数组,使用[ ]将多个带花括号记录组合成一个值

{
  "people":[
    {firstName:"BB","lastName":"CC","email":"ssss"},
    {firstName:"AA","lastName":"JJ","email":"asad"},
    {firstName:"DD","lastName":"OO","email":"PNBH"}
  ]
}

1.4启动elasticsearch

进入elasticsearch文件目录,

$ bin/elasticsearch

浏览器访问http://localhost:9200/ ,启动成功
如果要停止,控制台按下Ctrl+C

1.5RESTful API with JSON over HTTP

所有其他语言可以使用RESTful API 通过端口9200和 Elasticsearch 进行通信,你可以用你最喜爱的 web 客户端访问 Elasticsearch 。事实上,正如你所看到的,你甚至可以使用curl命令来和 Elasticsearch 交互。
一个 Elasticsearch 请求和任何 HTTP 请求一样由若干相同的部件组成:

POST方法新建一个资源,GET方法取得一个资源,PUT方法更新一个资源(如果ID不存在就新增一个资源),DELETE方法删除一个资源,如果只想检查一下文档是否存在,你可以试用HEAD来替代GET方法,这样就是会返回HTTP头文件curl -i -XHEAD

当用POST新增资源时,PATH API路径应该为index/type/id
计算集群中文档的数量

curl -XGET 'http://localhost:9200/_count?pretty'
返回结果:
{
  "count" : 0,
  "_shards" : {
    "total" : 0,
    "successful" : 0,
    "skipped" : 0,
    "failed" : 0
  }
}

也可以使用curl -i -XGET 'http://localhost:9200/_count?pretty'返回HTTP消息####1.6基本操作
插入数据(创建一个新文档)
index/type/id 三者唯一确定一个文档,想要保证文档是新加入的,最简单的方式是让ES自动生成唯一id

curl -XPOST 'http://localhost:9200/business/indiana/1?pretty' -H 'Content-Type: application/json' -d'
{
        "Business Name": "PORTLAND SERVICE CO INC ",
        "Business ID": "194035-060 ",
        "Entity Type": "Domestic For-Profit Corporation ",
        "Business Status": "Active ",
        "Creation Date": "05/28/1925 " 
}'
返回结果:
{
  "_index" : "business",
  "_type" : "indiana",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2, #主分片,副分片
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

修改文档

curl -XPUT 'http://localhost:9200/business/indiana/1?pretty' -H 'Content-Type: application/json' -d'
{
        "Business Name": "new-PORTLAND SERVICE CO INC ",
        "Business ID": "194035-061 ",
        "Entity Type": "Domestic For-Profit Corporation ",
        "Business Status": "notActive ",
        "Creation Date": "05/28/1925 " 
}'
返回结果:
{
  "_index" : "business",
  "_type" : "indiana",
  "_id" : "1",
  "_version" : 2,  #发现更新后version增加了
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 1,
  "_primary_term" : 1
}

查询文档

curl -XGET 'http://localhost:9200/business/indiana/1?pretty' -H 'Content-Type: application/json' 
返回结果:
{
  "_index" : "business",
  "_type" : "indiana",
  "_id" : "1",
  "_version" : 2,
  "found" : true,
  "_source" : {
    "Business Name" : "new-PORTLAND SERVICE CO INC ",
    "Business ID" : "194035-061 ",
    "Entity Type" : "Domestic For-Profit Corporation ",
    "Business Status" : "notActive ",
    "Creation Date" : "05/28/1925 "
  }
}

删除文档

curl -XDELETE 'http://localhost:9200/business/indiana/1'

删除索引

curl -XDELETE 'http://localhost:9200/business'

1.6批量操作数据的bulk方法

bulk方法支持的操作有 index, create, delete , update
我们可以把需要操作的数据写在一个example.json文件中,

es会以\n结尾来判断一条json数据,故一条json数据需要写在一行中,数据前一行是对该条数据的操作,可以指定_index,_type,_id,像图中这样{"index":{}} 是因为在curl语句中指定了_index和_type,不指定_id时,_id由es随机分配。

进入example.json所在文件夹,运行

$ curl -s -H "Content-Type: application/x-ndjson" -XPOST localhost:9200/bank/account/_bulk --data-binary "@mobile.json"; echo

如果有多个.json文件需要引入,可以将多个.json文件放入一个文件夹中,遍历文件夹中的文件。具体方法如下:
创建文件test.sh

#!/usr/bin/env bash

for file in ./文件夹名/*
do
echo $file
curl -s -H "Content-Type: application/x-ndjson" -XPOST localhost:9200/bank3/account3/_bulk --data-binary "@$file";
done

终端运行

chmod u+x test.sh
./test.sh
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容