我是靠谱客的博主 孤独芒果,最近开发中收集的这篇文章主要介绍ElasticSearch初探之所有初次使用记录(一),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

2018-4–28

1.第一次使用kibana时,需要指定一个ES索引,该索引会被置为默认索引(索引多了后可以修改默认值),框里的默认值是logstash-,因为kibana默认我们是通过logstash导入elasticsearch的数据。如果有时间序列字段,可以在Time Filter field name 下填入

2.kibana左上角的discover中,我们可以使用Lucene查询语法,提交搜索请求以及过滤结果。

3.你可以使用如下语法查询所有数据:

GET _search
{
"query": { "match_all": {} }
}

会返回所有的index的信息,以及“命中”的文档信息

4.查看集群状态:

GET /_cat/health?v&pretty’ 或者 GET _cluster/health

前者返回体如下:

epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1524923123 21:45:23 elasticsearch-win yellow 1 1 2 2 0 0 2 0 - 50.0%

  • status。Green 表示一切正常(集群功能齐全), yellow 表示所有数据可用,但是有些副本尚未分配(集群功能齐全),red 意味着由于某些原因有些数据不可用。注意,集群是 red,它仍然具有部分功能(例如,它将继续从可用的分片中服务搜索请求),但是您可能需要尽快去修复它,因为您已经丢失数据了。
  • 1个节点,一个data目录,2分片(shards),2主分片(pri),百分之50的分片处于“活跃”状态(剩余的暂时不知)
  • 状态为黄色因是因为Elasticsearch默认为这个索引创建了一个副本。由于此刻我们只有一个节点正在运行,因此只有在其他节点加入群集的时间点之后才能分配一个副本(以获得高可用性)。一旦该副本被分配到第二个节点上,该索引的健康状态将变为绿色。

后者返回的结果显示更佳,当然也可以在head中查询:
这里写图片描述

5.GET /_cat/nodes 查看集群节点信息

6.GET /_cluster/state 查看集群状态【默认情况下,群集状态请求将路由到主节点,以确保返回最新的群集状态。】

集群状态的查询还可以进一步细分,具体的参考官网doc

7.GET /_cat/indices?v 列出所有的索引【v参数显示各个字段名,pretty漂亮地打印JSON响应(如果有的话)】

8.GET /18-3-9test/myfirsttype/1?pretty 指定index/文档/id进行查询
【这里用到的索引是我之前创建的,创建索引可参考 24

9.插入一条数据

PUT /18-3-9test/myfirsttype/2?pretty
{
"name": "zhangsan",
"desc": "a cool boy"
}

返回结果:

{
“_index”: “18-3-9test”,
“_type”: “myfirsttype”,
“_id”: “2”,
“_version”: 1,
“result”: “created”,
“_shards”: {
“total”: 2,
“successful”: 1,
“failed”: 0
},
“created”: true
}

10.修改文档【除了语法,与update的区别还在于,修改文档不会先删除文档】
返回体的区别:

“_version”: 3,
“result”: “updated”,
“created”: false


PUT /18-3-9test/myfirsttype/3/?pretty
{
“name”: “zhangsan_2”,
“desc”: “not a cool boy”,
“script” : “ctx._source.age += 15”,
“school”: “shehuidaxue”
}

11.更新文档:【注意尽管 Elasticsearch 没有在后台马上更新。每当我们做一次更新,Elasticsearch 删除旧的文档,然后一次性应用更新索引一个新文档。】
与替换文档的区别在于,POST,_update

POST /18-3-9test/myfirsttype/3/_update?pretty
{
“name”: “zhangsan”,
“desc”: “a cool boy”,
“script” : “ctx._source.age -= 5”,
“school”: “shanxidaxue”
}
新增一“school”字段,使用简本来将 age 减 5

12.插入一条数据,不指定ID时,使用post命令,自动生成一个id

“_id”: “AWMMvOBkXN6wZSVZnIbK”,

13.批处理:【同时插入多条数据或者插入、删除等共用】
不指定ID,关键词:_bulk
同时插入多条数据:【多字段不要回车

POST /18-3-9test/myfirsttype/_bulk
{"index":{"_id":"6"}}
{"name": "wangwu","desc": "no desc","age" : "15","school": "beijingdaxue"}
{"index":{"_id":"7"}}
{"name": "wangwu_2","desc": "no desc_2","age" : "16","school": "beijingdaxue_"}

插入、删除等共用:

POST _bulk
{ "update" : { "_index" : "lagou" , "_type" : "job1" , "_id" : "1" } }
{"doc":{"title":"python分布式爬虫开发","salary_min":15000,"city":"北京","company":{"name":"百度","company_addr":"北京市软件园"},"publish_date":"2099-99-99","comments":15}}
{ "delete" : { "_index" : "lagou" , "_type" : "job2" , "_id" : "2" } }

这里写图片描述
这里写图片描述

14.和elasticsearch交互,及restful参数
和elasticsearch交互

  • 使用java客户端【分为两种,节点客户端(Node client)传输客户端(Transport client)
  • 使用 RESTful API 通过端口 9200 和 Elasticsearch 进行通信
  • 详情以及restful参数

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

16.一些适用场景的业务需求:

支持包含多值标签、数值、以及全文本的数据
检索任一雇员的完整信息
允许结构化搜索,比如查询 30 岁以上的员工
允许简单的全文搜索以及较复杂的短语搜索
支持在匹配文档内容中高亮显示搜索片段
支持基于数据创建和管理分析仪表盘

17.存储数据到 Elasticsearch 的行为叫做 索引 ,但在索引一个文档之前,需要确定将文档存储在哪里。

一个 Elasticsearch 集群可以 包含多个 索引 ,相应的每个索引可以包含多个 类型 。 这些不同的类型存储着多个 文档 ,每个文档又有 多个 属性

18.索引的几种概念:

你也许已经注意到 索引 这个词在 Elasticsearch 语境中包含多重意思, 所以有必要做一点儿说明:
索引(名词)
如前所述,一个 索引 类似于传统关系数据库中的一个 数据库 ,是一个存储关系型文档的地方。 索引 (index) 的复数词为 indices 或 indexes 。
索引(动词)
索引一个文档 就是存储一个文档到一个 索引 (名词)中以便它可以被检索和查询到。这非常类似于 SQL 语句中的 INSERT 关键词,除了文档已存在时新文档会替换就文档情况之外。Elasticsearch将查询发送到不同的shards,并将返回结果合并。
倒排索引
关系型数据库通过增加一个 索引 比如一个 B树(B-tree)索引 到指定的列上,以便提升数据检索速度。Elasticsearch 和 Lucene 使用了一个叫做 倒排索引 的结构来达到相同的目的。
默认的,一个文档中的每一个属性都是 被索引 的(有一个倒排索引)和可搜索的。一个没有倒排索引的属性是不能被搜索到的
Gateway:存储完整的索引数据(快照),可以是本地文件系统,也可以是HDFS、S3等问文件系统。

19.简单搜索:

  • 指定索引、type:
    GET /lagou/job1/_search
  • 指定字段值
    GET /18-3-9test/_search?q=age:>10
  • 。。。

2018-4-30
20.DSL版本的查询
使用领域特定语言 (DSL), 指定一个 JSON 请求

  • GET /18-3-9test/myfirsttype/_search
    {
    "query":{
    "match": {
    "desc": "*no*"
    }
    }
    }

    返回18-3-9test/myfirsttype/下“desc”字段中带有“no”的文档
"hits": {
"total": 5,
"max_score": 0.6445456,
"hits": [
  • 进一步过滤以上检索到的结果:【desc字段包含no,年龄小于16】
GET /18-3-9test/myfirsttype/_search
{
"query":{
"bool":{
"must":{
"match": {
"desc": "*no*"}
},
"filter":{
"range":{
"age":{"lt":16}
}
}
}
}
}

返回体:

"hits": {
"total": 3,
"max_score": 0.6445456,
"hits": [
{
"_index": "18-3-9test",
"_type": "myfirsttype",
"_id": "6",
"_score": 0.6445456,

可以看出max_score以及其他结果的score都是0.6445456。Elasticsearch 默认按照相关性得分排序,即每个文档跟查询的匹配程度,我的文档中,查找结果的的desc都是“no desc”;年龄都是15,所以结果相同【这种情况下貌似是按修改时间逆序排序,最近修改的靠后——个人结论,待验证

PS: 初学者小小的抱怨下——这么简单的一个检索,一堆大括号,一堆双引号,就算写得不累,看得也累啊,简直无法与SQL相提并论。。。“过于结构化的检索非结构文档???”
哪天写个很多条件的筛选,排错时数{}(大括号)还不得数花眼???

  • 使用match_phrase_prefix匹配指定短语开头的短语:【类似的还有“match_phrase”】
GET /18-3-9test/myfirsttype/_search
{
"query":{
"match_phrase_prefix":
{
"school": "beijin"
}
}
}

21.GET /18-3-9test/_mapping 使用Mapping了解索引文件的相关信息

部分结果:
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"school": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},

22.关于Mapping:
elasticsearch中的mapping类似于数据库中的Schema。

  • mapping定义索引下Type字段的处理规则,索引如何建立,索引的数据类型,是否保存原始索引JSON文档,是否压缩原始JSON文档,是否需要分词处理等
  • 一个索引文件下可以存储不同Mapping的类型文件
  • Mapping可以通过语句删除,对应mapping下的数据也会被删除
  • elasticsearch有一定的字段自动推理能力,但是当需要对某些字段添加特殊属性时(比如该字段是否分词,高亮,是否存储,使用什么分词器等等),就需要手动的配置mapping了。

23.GET /18-3-9test/_search?q=age:>10 查询年龄大于10的文档
q后的“=”是基于Lucene的查询语句,“=”后接查询字段,用”:”分割查询条件(也可以使用Query DSL语法进行查询)

"hits": {
"total": 8,
"max_score": 1,
"hits": [

‘’命中‘’8
多个文档,以数组的形式返回

24.创建索引并进行一些设置
【使用curl进行创建】
【linux下自然方便,如果使用windows,可以安装curl,或者直接使用cmder(推荐)】

curl -XPUT 'http://172.22.112.1:9200/18-4-30test/' -d '{
"settings":{
"index":{
"number_of_shards":5,
"number_of_replicas":1
}
}
}'

这里写图片描述
补充:其他配置

  • blocks.read_only: 设置ture后,只允许读,不允许写或者更新
  • blocks.read: 设置ture后,禁止读
  • blocks.write: 设置ture后,禁止写
  • blocks.metadata: 设置ture后,禁止对metadata操作

25.创建索引并进行一些设置
【这里在kibana中进行创建】

PUT /18-4-30test/
{
"settings":{
"index":{
"number_of_shards":5,
"number_of_replicas":1
}
}
}

返回体:

“type”: “index_already_exists_exception”,
“reason”: “index [18-4-30test/8LkZWK7zTa–VrGNY8ffdQ] already exists”,

26.GET /18-4-30test/_settings
获取索引文件的配置信息
或者curl:
这里写图片描述
- 补充,索引可以有多个,比如
GET /18-4-30test,18-3-9test/_settings
- 也可以使用通配符
GET /*test/_settings
- 还可以使用_all参数
GET /_all/_settings

27.修改索引配置

PUT /18-4-30test/_settings
{
"index":{
"number_of_replicas":2
}
}

返回:

{
"acknowledged": true
}

28.删除一个索引:
DELETE /customer
注意:没有任何提示【至少kibana中没有】

29.

~短语字典:
1.match_phrase 查询时匹配指定‘’短句‘’【完全匹配,比如match_phrase 指定123,可以检索出123,但是不能检索出1234、0123】
2.match_phrase_prefix 查询‘’指定短句开头‘’的文档【可检索出123,1234;不能检索0123】
3.query 后面是所有查询语法
4.bool
5.filter 后面跟一些过滤条件
6.range
7.must
~

(elasticsearch中的短语语法略多略混乱[至少目前我这个初学者是这样认为的],这一块,我准备做个表格或者流程图来做总结)

最后

以上就是孤独芒果为你收集整理的ElasticSearch初探之所有初次使用记录(一)的全部内容,希望文章能够帮你解决ElasticSearch初探之所有初次使用记录(一)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部